Commit Graph

72 Commits

Author SHA1 Message Date
Rob Wu 5046a3f400 fix: Remove non-existing bookmarks.{export,import}
These APIs are not supported by Firefox:
https://searchfox.org/mozilla-central/rev/292d295d6b084b43b70de26a42e68513bb7b36a3/browser/components/extensions/schemas/bookmarks.json#436-465

In Chrome the APIs are not available either, except to some internal components:
b7963dca6a/chrome/common/extensions/api/_api_features.json (138)

Also moved "getTree" to ensure that the keys are alphabetically sorted.
2018-06-15 10:49:53 -07:00
Rob Wu 4a407da02c feat: Add topSites namespace to metadata
https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/topSites#Browser_compatibility
2018-06-15 10:41:08 -07:00
Rob Wu 69e58761a5 feat: Add sessions namespace to metadata
https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/sessions#Browser_compatibility

Only `sessions.getRecentlyClosed` and `sessions.restore` are currently
supported by Firefox.

`sessions.getDevices` is included anyway since this method may be added
to Firefox in the future: https://bugzil.la/1308059
2018-06-15 10:41:08 -07:00
Rob Wu f086bc15ac feat: Add permissions namespace to metadata
https://searchfox.org/mozilla-central/rev/292d295d6b084b43b70de26a42e68513bb7b36a3/toolkit/components/extensions/schemas/permissions.json
https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/permissions#Browser_compatibility
2018-06-15 10:41:08 -07:00
Rob Wu 9225b2a91b feat: Add browsingData namespace to metadata
The auto-generated output from the metadata generator also includes the
following methods from Chrome. Firefox does not support them, so they
were not included in the metadata:

```
    "removeAppcache": {
      "minArgs": 1,
      "maxArgs": 1
    },
    "removeFileSystems": {
      "minArgs": 1,
      "maxArgs": 1
    },
    "removeIndexedDB": {
      "minArgs": 1,
      "maxArgs": 1
    },
    "removeWebSQL": {
      "minArgs": 1,
      "maxArgs": 1
    },
```

Also see:
https://searchfox.org/mozilla-central/rev/292d295d6b084b43b70de26a42e68513bb7b36a3/browser/components/extensions/schemas/browsing_data.json
https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/browsingData#Browser_compatibility
2018-06-15 10:41:08 -07:00
Luca Greco 5d186bae84 test(browsers-smoketests): Run a set of smoke tests on both Chrome and Firefox
This commit introduces tape as the test framework used to define the tests in the
test extension contexts and send them to the nodejs script that orchestrate the
test run.

The nodejs script has also been migrated from mocha to tape, it uses the custom test
helpers provided to setup the test environment (e.g. create a temporary dir
for the test extension, copy the last polyfill build, bundle tape to be used
in the test extension, start the browser which run the test extension
and finally collect the results of the test extension) and then it merges all the
tap logs collected from every test extension into a single "per browser" test suite.

- updated travis nodejs environment to nodejs 8
- uses tape to collect test results from inside the test extension
- added test case to check polyfill 'existing browser API object' detection
- added test for expected rejection on tabs.sendMessage with an invalid tabId
- added test with multiple listeners which resolves to undefined and null
- optionally run chrome smoketests with --enable-features=NativeCrxBindings
2018-06-02 20:59:46 +02:00
Luca Greco 6c8268f6fb feat: Reject sendMessage returned promise when a onMessage listener returns a rejected promise. 2018-06-02 20:59:46 +02:00
Luca Greco 831e355650 fix: print a deprecation warning when sendResponse callback is used for the first time 2018-06-02 20:59:46 +02:00
YFdyh000 314d2c6df7 chore: Always use LF for dist files (#67) 2018-05-31 16:19:46 +02:00
Luca Greco 76eeeaccc9
feat: Added support for the sendResponse callback in the runtime.onMessage listeners (#97) 2018-05-14 20:38:21 +02:00
Federico Brigante 6f9cfdf6cf chore(README): Drop reference to babel for async/await (#50) 2018-04-09 19:24:15 +02:00
Rob Wu bdb07e10cc chore: Added .gitattributes to force eol=lf to fix #101 (#103) 2018-04-09 15:44:30 +02:00
Luca Greco dd180a0907 chore(test): Fixed module bundlers tests on webpack 4 2018-04-09 15:13:35 +02:00
Rob Wu a7cbdcc23e fix: Use browser.storage.local in README (#87) (#90)
Applied fixed to all code snippets in README.md so that they are syntactically valid.
2018-03-19 15:42:40 +01:00
Luca Greco 0fd508671a test: Added smoke test for pageAction.show fallback to no callback on chrome. 2018-03-13 14:27:22 +01:00
Gerben 596f47bcc8 chore: Improve "fallback to no callback" wrapper.
According to review comment https://github.com/mozilla/webextension-polyfill/pull/59/files#r142001949
2018-03-13 14:27:22 +01:00
Luca Greco 917ed413f6 fix: Add a new fallbackToNoCallback metadata property to customize the pageAction.show/hide wrappers behavior 2018-03-13 14:27:22 +01:00
Megaman 0778db93ca fix: pageAction.show/hide should have 1 non-optional parameter in their metadata 2018-03-13 14:27:22 +01:00
Rob Wu 67b3780d38 fix: Lazily initialize API via the original target (#71)
Originally, the polyfill created a Proxy with the original API object as
the target. This was changed to `Object.create(chrome)` because not
doing so would prevent the `browser.devtools` API from working because
the devtools API object is assigned as a read-only & non-configurable
property (#57).

However, that action itself caused a new bug: Whenever an API object
is dereferenced via the `browser` namespace, the original API is no
longer available in the `chrome` namespace, and trying to access the
API through `chrome` returns `undefined` plus the "Previous API
instantiation failed" warning (#58).
This is because Chrome lazily initializes fields in the `chrome`
API, but on the object from which the property is accessed, while
the polyfill accessed the property through an object with the
prototype set to `chrome` instead of directly via chrome.

To fix that, `Object.create(chrome)` was replaced with
`Object.assign({}, chrome)`. This fixes both of the previous issues
because
1) It is still a new object.
2) All lazily initialized fields are explicitly initialized.

This fix created a new issue: In Chrome some APIs cannot be used even
though they are visible in the API (e.g. `chrome.clipboard`), so
calling `Object.assign({}, chrome)` causes an error to be printed to
the console (#70).

To solve this, I use `Object.create(chrome)` again as a proxy target,
but dereference the API via the original target (`chrome`) to not
regress on #58.
Besides fixing the bug, this also reduces the performance impact
of the API because all API fields are lazily initialized again,
instead of upon start-up.

This fixes #70.
2018-03-12 19:23:28 +01:00
Luca Greco 94efb908b8
fix: Pass --no-sandbox chrome CLI option when running the integration tests on travis (#85) 2018-01-09 17:49:56 +01:00
Sébastien Règne 13d0ced89e feat: add identity.launchWebAuthFlow() in metadata. (#39)
Provides the api metadata for the identity.launchWebAuthFlow API method (which fixes #80)
2018-01-09 16:27:33 +01:00
Luca Greco 49ce6ef155 test: Run a minimal set of tests from a test extension running on Chrome (#66)
* test: Run a minimal set of integration/smoke tests on Chrome
* chore: minor tweaks to dependencies version in the package.json
2017-10-23 19:42:01 +02:00
Luca Greco 8914541b81 chore: bump version for release 0.2.1 2017-10-12 14:23:39 +02:00
Luca Greco 47ddfbfddb fix: Prevent 'Previous API instantiation failed' errors on runtime.sendMessage API calls (#64) 2017-10-11 15:51:43 +02:00
Andy McKay 09d05cc073 Merge pull request #62 from tiagomoraismorgado88/patch-1
introducing table of contents
2017-10-06 10:36:37 -07:00
tmm88 390ccbf8b6 introducing table of contents
# Greetings

**the current PR does basically aim at:**
- *introducing table of contents*

---

**the motivation behind such a thing is basically to:**
- *improve accessability of the file*
2017-10-01 11:47:50 +01:00
Luca Greco 318271214f chore: bump version for release 0.2.0 2017-09-29 23:43:59 +02:00
Luca Greco 61d92ea79b feat: Added devtools.inspectedWindow.eval and devtools.panels.create to wrapped APIs.
To be able to wrap the devtools API namespaces, this patch applies the
following changes:

- fix: Prevent Proxy violation exception on the read-only/non-configurable devtools property
  by using an empty object with the `chrome` API object as its prototype
  as the root Proxy target (the Proxy instances returned for the
  `chrome` API object) and add a related test case.

- fix: Added support for a new `singleCallbackArg` metadata property,
  which prevents devtools.panels.create to resolve an array of
  parameters (See the related Chromium issue at
  https://bugs.chromium.org/p/chromium/issues/detail?id=768159)
  and add the related test cases.

- test: Changes to the test case related to proxy getter/setter behavior
  on non wrapped properties:

  in the "deletes proxy getter/setter that are not wrapped" test case from
  the "test-proxied-properties.js" test file, we ensure that when a
  getter/setter is called for a "non-wrapped" property, the getter/setter
  is going to affect the original target object, unfortunately this in
  not true anymore for the root object (the `chrome` API object) because
  we are using an empty object (which has the `chrome` API object as its
  prototype and it is not exposed outside of the polyfill sources)
  as the target of the Proxy instance related to it,
  this change to the target of the Proxy has been needed to prevent the
  TypeError exception raised by the Proxy instance when we try to access
  the "devtools" property (which is non-configurable and read-only on the
  `chrome` API object).
2017-09-25 22:20:07 +02:00
Luca Greco 6b3c6da659 chore: bump version for release 0.1.2 2017-09-25 20:42:56 +02:00
Federico Brigante ab01b9605b docs: Added build status badge to the README.md (#45) 2017-08-20 13:35:53 +02:00
Federico Brigante 9468773ffe fix: Limit eslint to the project's own rules (#46) 2017-08-20 13:33:56 +02:00
Rob Wu ab0b667ff3 fix: Lock gruntify-eslint version to fix build errors (#42)
* Lock version of gruntify-eslint (and grunt-replace)

The current repository is compatible with gruntify-eslint 3.1.0.
`*` resolves to version 4.0.0., which bumps its eslint dependency
from 3.x to 4.x, which in turn causes linting errors.

To get the default check-out to pass, lock the dependencies to
known-compatible versions.

* Bump gruntify-eslint to 4.0.0 + fix lint error

Bump gruntify-eslint to 4.0.0, which depends on eslint ^4.0.0,
and fix the lint error that appeared.
2017-08-20 13:26:43 +02:00
Luca Greco a1fd64cab1 chore: bump version for release 0.1.1 2017-04-13 15:02:56 +02:00
Luca Greco c5fd6fdf41 chore: Publish tagged releases to npm from travis job 2017-04-13 14:48:04 +02:00
Luca Greco a34f9c71f8 test: run tests for the webpack and browserify bundled files on travis 2017-04-13 14:30:52 +02:00
Luca Greco 46b8f7e583 fix: use babel and transform-es2015-modules-umd to fix the webpack bundling issue 2017-04-13 14:30:52 +02:00
Luca Greco 96cfb9c5c2 test: re-run the test suite on the minified file on travis 2017-04-11 14:24:23 +02:00
Luca Greco 9a38d923e9 fix: use babili to minify ES6 sources. 2017-04-11 14:19:56 +02:00
Luca Greco 31d778c2cd fix: Changes to the UMD built file and npm package publishing
This patch introduces on top of #17 some minor changes from the
review comments, in particular:

- do not replace require("../filename") to include the api-metadata.json
  (restored the original '{/* include("...") */}' placeholder)
- raise an appropriate error message when the source file is used
  by mistake (or the "dist/" file has not been built correctly).
- set the generated UMD wrapped module as the package.json main
  entrypoint
- do not include api-metadata.json and src dir from the files included
  in the published npm package
- run both build and test npm scripts on prepublish
2017-04-11 14:16:15 +02:00
Joseph Frazier f9248e62e7 feat: library wrapped as an UMD module
This addresses [issue 7] by making it possible for users to run:

```sh
npm install webextension-polyfill
```

and download a module that they can use with a bundler as follows:

```js
import browser from 'webextension-polyfill';
```

Also, add a [prepublish script] so that users who clone the repo don't
need to run `grunt` manually. In addition, specify [files] in
package.json so that this module can be published to npm without
including miscellanea. This can be verified by running:

```sh
npm pack && tar -tvf webextension-polyfill-0.1.0.tgz
```

[issue 7]: https://github.com/mozilla/webextension-polyfill/issues/7
[files]: https://docs.npmjs.com/files/package.json#files
[prepublish script]: https://docs.npmjs.com/misc/scripts
2017-04-11 13:32:31 +02:00
Joseph Frazier 52791c8633 fix: normalized package.json properties
When running `npm install` to add new `devDependencies`, `npm` reformats
package.json with these changes, as can be seen [here]. Making these
changes separately allows developers to more easily keep them out of
unrelated commits.

[here]: https://github.com/mozilla/webextension-polyfill/pull/11/files#diff-b9cfc7f2cdf78a7f4b91a753d10865a2L22
2017-04-11 13:32:02 +02:00
Luca Greco 77af627d05 Merge pull request #6 from rpl/fix/reduce-ircbot-verbosity
fix: reduced travis irc message verbosity.
2016-11-14 22:41:48 +01:00
Luca Greco 27b71c2e2a fix: reduced travis irc message verbosity. 2016-11-14 22:34:17 +01:00
Luca Greco df71efea17 test: introduced a test suite for unit testing.
Merge pull request #2 from rpl/proposal/unit-testing
2016-11-14 19:20:38 +01:00
Luca Greco d1b0ff929a fix: rename polyfill source into src/browser-polyfill.js 2016-11-07 16:56:48 +01:00
Luca Greco e19cf82332 fix: indentation missed by eslint 2016-11-07 16:34:34 +01:00
Luca Greco 573c438c23 fix: change notified irc channel 2016-11-07 16:34:34 +01:00
Luca Greco 9a04fc3876 fix: pluralize argument in raised error message 2016-11-07 16:34:34 +01:00
Luca Greco 705e93bc2f test: added test case to check that different listeners are wrapped by different wrappers 2016-11-07 16:34:34 +01:00
Luca Greco b28d3d9d74 fix: fixed typos and nits in tests. 2016-11-07 16:34:34 +01:00