diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /testing/marionette/puppeteer/firefox/firefox_puppeteer/api/places.py | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'testing/marionette/puppeteer/firefox/firefox_puppeteer/api/places.py')
-rw-r--r-- | testing/marionette/puppeteer/firefox/firefox_puppeteer/api/places.py | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/testing/marionette/puppeteer/firefox/firefox_puppeteer/api/places.py b/testing/marionette/puppeteer/firefox/firefox_puppeteer/api/places.py new file mode 100644 index 000000000..fadc2c19b --- /dev/null +++ b/testing/marionette/puppeteer/firefox/firefox_puppeteer/api/places.py @@ -0,0 +1,150 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this file, +# You can obtain one at http://mozilla.org/MPL/2.0/. + +from collections import namedtuple +from time import sleep + +from marionette_driver.errors import MarionetteException + +from firefox_puppeteer.base import BaseLib + + +class Places(BaseLib): + """Low-level access to several bookmark and history related actions.""" + + BookmarkFolders = namedtuple('bookmark_folders', + ['root', 'menu', 'toolbar', 'unfiled']) + bookmark_folders = BookmarkFolders('root________', 'menu________', + 'toolbar_____', 'unfiled_____') + + # Bookmark related helpers # + + def is_bookmarked(self, url): + """Check if the given URL is bookmarked. + + :param url: The URL to Check + + :returns: True, if the URL is a bookmark + """ + return self.marionette.execute_async_script(""" + Components.utils.import("resource://gre/modules/PlacesUtils.jsm"); + + PlacesUtils.bookmarks.fetch({url: arguments[0]}).then(bm => { + marionetteScriptFinished(bm != null); + }); + """, script_args=[url]) + + def get_folder_ids_for_url(self, url): + """Retrieve the folder ids where the given URL has been bookmarked in. + + :param url: URL of the bookmark + + :returns: List of folder ids + """ + return self.marionette.execute_async_script(""" + Components.utils.import("resource://gre/modules/PlacesUtils.jsm"); + + let folderGuids = [] + + function onResult(bm) { + folderGuids.push(bm.parentGuid); + } + + PlacesUtils.bookmarks.fetch({url: arguments[0]}, onResult).then(() => { + marionetteScriptFinished(folderGuids); + }); + """, script_args=[url]) + + def is_bookmark_star_button_ready(self): + """Check if the status of the star-button is not updating. + + :returns: True, if the button is ready + """ + return self.marionette.execute_script(""" + let button = window.BookmarkingUI; + + return button.status !== button.STATUS_UPDATING; + """) + + def restore_default_bookmarks(self): + """Restore the default bookmarks for the current profile.""" + retval = self.marionette.execute_async_script(""" + Components.utils.import("resource://gre/modules/BookmarkHTMLUtils.jsm"); + + // Default bookmarks.html file is stored inside omni.jar, + // so get it via a resource URI + let defaultBookmarks = 'chrome://browser/locale/bookmarks.html'; + + // Trigger the import of the default bookmarks + BookmarkHTMLUtils.importFromURL(defaultBookmarks, true) + .then(() => marionetteScriptFinished(true)) + .catch(() => marionetteScriptFinished(false)); + """, script_timeout=10000) + + if not retval: + raise MarionetteException("Restore Default Bookmarks failed") + + # Browser history related helpers # + + def get_all_urls_in_history(self): + """Retrieve any URLs which have been stored in the history.""" + return self.marionette.execute_script(""" + Components.utils.import("resource://gre/modules/PlacesUtils.jsm"); + + let options = PlacesUtils.history.getNewQueryOptions(); + let root = PlacesUtils.history.executeQuery( + PlacesUtils.history.getNewQuery(), options).root; + let urls = []; + + root.containerOpen = true; + for (let i = 0; i < root.childCount; i++) { + urls.push(root.getChild(i).uri) + } + root.containerOpen = false; + + return urls; + """) + + def remove_all_history(self): + """Remove all history items.""" + retval = self.marionette.execute_async_script(""" + Components.utils.import("resource://gre/modules/PlacesUtils.jsm"); + + PlacesUtils.history.clear() + .then(() => marionetteScriptFinished(true)) + .catch(() => marionetteScriptFinished(false)); + """, script_timeout=10000) + + if not retval: + raise MarionetteException("Removing all history failed") + + def wait_for_visited(self, urls, callback): + """Wait until all passed-in urls have been visited. + + :param urls: List of URLs which need to be visited and indexed + + :param callback: Method to execute which triggers loading of the URLs + """ + # Bug 1121691: Needs observer handling support with callback first + # Until then we have to wait about 4s to ensure the page has been indexed + callback() + sleep(4) + + # Plugin related helpers # + + def clear_plugin_data(self): + """Clear any kind of locally stored data from plugins.""" + self.marionette.execute_script(""" + let host = Components.classes["@mozilla.org/plugin/host;1"] + .getService(Components.interfaces.nsIPluginHost); + let tags = host.getPluginTags(); + + tags.forEach(aTag => { + try { + host.clearSiteData(aTag, null, Components.interfaces.nsIPluginHost + .FLAG_CLEAR_ALL, -1); + } catch (ex) { + } + }); + """) |