diff options
Diffstat (limited to 'mobile/android/chrome/content/Feedback.js')
-rw-r--r-- | mobile/android/chrome/content/Feedback.js | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/mobile/android/chrome/content/Feedback.js b/mobile/android/chrome/content/Feedback.js new file mode 100644 index 000000000..8727c46c3 --- /dev/null +++ b/mobile/android/chrome/content/Feedback.js @@ -0,0 +1,64 @@ +/* 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/. */ +"use strict"; + +var Feedback = { + + get _feedbackURL() { + delete this._feedbackURL; + return this._feedbackURL = Services.urlFormatter.formatURLPref("app.feedbackURL"); + }, + + observe: function(aMessage, aTopic, aData) { + if (aTopic !== "Feedback:Show") { + return; + } + + // Don't prompt for feedback in distribution builds. + try { + Services.prefs.getCharPref("distribution.id"); + return; + } catch (e) {} + + let url = this._feedbackURL; + let browser = BrowserApp.selectOrAddTab(url, { parentId: BrowserApp.selectedTab.id }).browser; + + browser.addEventListener("FeedbackClose", this, false, true); + browser.addEventListener("FeedbackMaybeLater", this, false, true); + + // Dispatch a custom event to the page content when feedback is prompted by the browser. + // This will be used by the page to determine it's being loaded directly by the browser, + // instead of by the user visiting the page, e.g. through browser history. + function loadListener(event) { + browser.removeEventListener("DOMContentLoaded", loadListener, false); + browser.contentDocument.dispatchEvent(new CustomEvent("FeedbackPrompted")); + } + browser.addEventListener("DOMContentLoaded", loadListener, false); + }, + + handleEvent: function(event) { + if (!this._isAllowed(event.target)) { + return; + } + + switch (event.type) { + case "FeedbackClose": + // Do nothing. + break; + + case "FeedbackMaybeLater": + Messaging.sendRequest({ type: "Feedback:MaybeLater" }); + break; + } + + let win = event.target.ownerDocument.defaultView.top; + BrowserApp.closeTab(BrowserApp.getTabForWindow(win)); + }, + + _isAllowed: function(node) { + let uri = node.ownerDocument.documentURIObject; + let feedbackURI = Services.io.newURI(this._feedbackURL, null, null); + return uri.prePath === feedbackURI.prePath; + } +}; |