зеркало из https://github.com/mozilla/gecko-dev.git
Backed out changeset 6c4c8b4e38cf (bug 1394580)
This commit is contained in:
Родитель
aead58a5ad
Коммит
d7c61803f9
|
@ -1,20 +1,17 @@
|
|||
# Stylesheets
|
||||
category agent-style-sheets browser-content-stylesheet chrome://geckoview/skin/content.css
|
||||
|
||||
# GeckoViewStartup.js
|
||||
component {8e993c34-fdd6-432c-967e-f995d888777f} GeckoViewStartup.js
|
||||
contract @mozilla.org/geckoview/startup;1 {8e993c34-fdd6-432c-967e-f995d888777f}
|
||||
category app-startup GeckoViewStartup service,@mozilla.org/geckoview/startup;1
|
||||
category profile-after-change GeckoViewStartup @mozilla.org/geckoview/startup;1 process=main
|
||||
|
||||
# GeckoViewPermission.js
|
||||
component {42f3c238-e8e8-4015-9ca2-148723a8afcf} GeckoViewPermission.js
|
||||
contract @mozilla.org/content-permission/prompt;1 {42f3c238-e8e8-4015-9ca2-148723a8afcf}
|
||||
category app-startup GeckoViewPermission service,@mozilla.org/content-permission/prompt;1
|
||||
|
||||
# GeckoViewPrompt.js
|
||||
component {076ac188-23c1-4390-aa08-7ef1f78ca5d9} GeckoViewPrompt.js
|
||||
contract @mozilla.org/embedcomp/prompt-service;1 {076ac188-23c1-4390-aa08-7ef1f78ca5d9}
|
||||
contract @mozilla.org/prompter;1 {076ac188-23c1-4390-aa08-7ef1f78ca5d9}
|
||||
category app-startup GeckoViewPrompt service,@mozilla.org/prompter;1
|
||||
category profile-after-change GeckoViewPrompt @mozilla.org/prompter;1 process=main
|
||||
component {aa0dd6fc-73dd-4621-8385-c0b377e02cee} GeckoViewPrompt.js process=main
|
||||
contract @mozilla.org/colorpicker;1 {aa0dd6fc-73dd-4621-8385-c0b377e02cee} process=main
|
||||
component {e4565e36-f101-4bf5-950b-4be0887785a9} GeckoViewPrompt.js process=main
|
||||
|
|
|
@ -4,12 +4,11 @@
|
|||
|
||||
const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
|
||||
|
||||
Cu.import("resource://gre/modules/Services.jsm");
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(this, {
|
||||
EventDispatcher: "resource://gre/modules/Messaging.jsm",
|
||||
Services: "resource://gre/modules/Services.jsm",
|
||||
});
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "EventDispatcher",
|
||||
"resource://gre/modules/Messaging.jsm");
|
||||
|
||||
// See: http://developer.android.com/reference/android/Manifest.permission.html
|
||||
const PERM_ACCESS_FINE_LOCATION = "android.permission.ACCESS_FINE_LOCATION";
|
||||
|
@ -17,7 +16,6 @@ const PERM_CAMERA = "android.permission.CAMERA";
|
|||
const PERM_RECORD_AUDIO = "android.permission.RECORD_AUDIO";
|
||||
|
||||
function GeckoViewPermission() {
|
||||
this.wrappedJSObject = this;
|
||||
}
|
||||
|
||||
GeckoViewPermission.prototype = {
|
||||
|
@ -31,6 +29,12 @@ GeckoViewPermission.prototype = {
|
|||
/* ---------- nsIObserver ---------- */
|
||||
observe: function(aSubject, aTopic, aData) {
|
||||
switch (aTopic) {
|
||||
case "app-startup": {
|
||||
Services.obs.addObserver(this, "getUserMedia:ask-device-permission");
|
||||
Services.obs.addObserver(this, "getUserMedia:request");
|
||||
Services.obs.addObserver(this, "PeerConnection:request");
|
||||
break;
|
||||
}
|
||||
case "getUserMedia:ask-device-permission": {
|
||||
this.handleMediaAskDevicePermission(aData, aSubject);
|
||||
break;
|
||||
|
|
|
@ -4,26 +4,60 @@
|
|||
|
||||
const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
|
||||
|
||||
Cu.import("resource://gre/modules/Services.jsm");
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(this, {
|
||||
EventDispatcher: "resource://gre/modules/Messaging.jsm",
|
||||
FileUtils: "resource://gre/modules/FileUtils.jsm",
|
||||
Services: "resource://gre/modules/Services.jsm",
|
||||
});
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "ContentPrefServiceParent",
|
||||
"resource://gre/modules/ContentPrefServiceParent.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "EventDispatcher",
|
||||
"resource://gre/modules/Messaging.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "FileUtils",
|
||||
"resource://gre/modules/FileUtils.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyServiceGetter(this, "UUIDGen",
|
||||
"@mozilla.org/uuid-generator;1", "nsIUUIDGenerator");
|
||||
|
||||
function PromptFactory() {
|
||||
this.wrappedJSObject = this;
|
||||
}
|
||||
|
||||
PromptFactory.prototype = {
|
||||
classID: Components.ID("{076ac188-23c1-4390-aa08-7ef1f78ca5d9}"),
|
||||
|
||||
QueryInterface: XPCOMUtils.generateQI([
|
||||
Ci.nsIPromptFactory, Ci.nsIPromptService, Ci.nsIPromptService2]),
|
||||
Ci.nsIObserver, Ci.nsIPromptFactory, Ci.nsIPromptService, Ci.nsIPromptService2]),
|
||||
|
||||
/* ---------- nsIObserver ---------- */
|
||||
observe: function(aSubject, aTopic, aData) {
|
||||
switch (aTopic) {
|
||||
case "app-startup": {
|
||||
Services.obs.addObserver(this, "chrome-document-global-created");
|
||||
Services.obs.addObserver(this, "content-document-global-created");
|
||||
break;
|
||||
}
|
||||
case "profile-after-change": {
|
||||
// ContentPrefServiceParent is needed for e10s file picker.
|
||||
ContentPrefServiceParent.init();
|
||||
Services.mm.addMessageListener("GeckoView:Prompt", this);
|
||||
break;
|
||||
}
|
||||
case "chrome-document-global-created":
|
||||
case "content-document-global-created": {
|
||||
let win = aSubject.QueryInterface(Ci.nsIInterfaceRequestor)
|
||||
.getInterface(Ci.nsIDocShell).QueryInterface(Ci.nsIDocShellTreeItem)
|
||||
.rootTreeItem.QueryInterface(Ci.nsIInterfaceRequestor)
|
||||
.getInterface(Ci.nsIDOMWindow);
|
||||
if (win !== aSubject) {
|
||||
// Only attach to top-level windows.
|
||||
return;
|
||||
}
|
||||
win.addEventListener("click", this); // non-capture
|
||||
win.addEventListener("contextmenu", this); // non-capture
|
||||
break;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
handleEvent: function(aEvent) {
|
||||
switch (aEvent.type) {
|
||||
|
|
|
@ -1,155 +0,0 @@
|
|||
/* 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/. */
|
||||
|
||||
const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
|
||||
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "Services",
|
||||
"resource://gre/modules/Services.jsm");
|
||||
|
||||
function GeckoViewStartup() {
|
||||
}
|
||||
|
||||
GeckoViewStartup.prototype = {
|
||||
classID: Components.ID("{8e993c34-fdd6-432c-967e-f995d888777f}"),
|
||||
|
||||
QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver]),
|
||||
|
||||
addLazyGetter: function(aOptions) {
|
||||
let {name, script, service, module, observers, ppmm, mm} = aOptions;
|
||||
if (script) {
|
||||
XPCOMUtils.defineLazyScriptGetter(this, name, script);
|
||||
} else if (module) {
|
||||
XPCOMUtils.defineLazyGetter(this, name, _ => {
|
||||
let sandbox = {};
|
||||
Cu.import(module, sandbox);
|
||||
if (aOptions.init) {
|
||||
aOptions.init.call(this, sandbox[name]);
|
||||
}
|
||||
return sandbox[name];
|
||||
});
|
||||
} else if (service) {
|
||||
XPCOMUtils.defineLazyGetter(this, name, _ =>
|
||||
Cc[service].getService(Ci.nsISupports).wrappedJSObject);
|
||||
}
|
||||
|
||||
if (observers) {
|
||||
let observer = (subject, topic, data) => {
|
||||
Services.obs.removeObserver(observer, topic);
|
||||
if (!aOptions.once) {
|
||||
Services.obs.addObserver(this[name], topic);
|
||||
}
|
||||
this[name].observe(subject, topic, data); // Explicitly notify new observer
|
||||
};
|
||||
observers.forEach(topic => Services.obs.addObserver(observer, topic));
|
||||
}
|
||||
|
||||
if (ppmm || mm) {
|
||||
let target = ppmm ? Services.ppmm : Services.mm;
|
||||
let listener = msg => {
|
||||
target.removeMessageListener(msg.name, listener);
|
||||
if (!aOptions.once) {
|
||||
target.addMessageListener(msg.name, this[name]);
|
||||
}
|
||||
this[name].receiveMessage(msg);
|
||||
};
|
||||
(ppmm || mm).forEach(msg => target.addMessageListener(msg, listener));
|
||||
}
|
||||
},
|
||||
|
||||
addLazyEventListener: function(aOptions) {
|
||||
let {name, target, events, options} = aOptions;
|
||||
let listener = event => {
|
||||
if (!options || !options.once) {
|
||||
target.removeEventListener(event.type, listener, options);
|
||||
target.addEventListener(event.type, this[name], options);
|
||||
}
|
||||
this[name].handleEvent(event);
|
||||
};
|
||||
events.forEach(event => target.addEventListener(event, listener, options));
|
||||
},
|
||||
|
||||
/* ---------- nsIObserver ---------- */
|
||||
observe: function(aSubject, aTopic, aData) {
|
||||
switch (aTopic) {
|
||||
case "app-startup": {
|
||||
// Parent and content process.
|
||||
Services.obs.addObserver(this, "chrome-document-global-created");
|
||||
Services.obs.addObserver(this, "content-document-global-created");
|
||||
|
||||
this.addLazyGetter({
|
||||
name: "GeckoViewPermission",
|
||||
service: "@mozilla.org/content-permission/prompt;1",
|
||||
observers: [
|
||||
"getUserMedia:ask-device-permission",
|
||||
"getUserMedia:request",
|
||||
"PeerConnection:request",
|
||||
],
|
||||
});
|
||||
|
||||
if (Services.appinfo.processType != Services.appinfo.PROCESS_TYPE_DEFAULT) {
|
||||
// Content process only.
|
||||
this.addLazyGetter({
|
||||
name: "GeckoViewPrompt",
|
||||
service: "@mozilla.org/prompter;1",
|
||||
});
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case "profile-after-change": {
|
||||
// Parent process only.
|
||||
// ContentPrefServiceParent is needed for e10s file picker.
|
||||
this.addLazyGetter({
|
||||
name: "ContentPrefServiceParent",
|
||||
module: "resource://gre/modules/ContentPrefServiceParent.jsm",
|
||||
init: cpsp => cpsp.alwaysInit(),
|
||||
ppmm: [
|
||||
"ContentPrefs:FunctionCall",
|
||||
"ContentPrefs:AddObserverForName",
|
||||
"ContentPrefs:RemoveObserverForName",
|
||||
],
|
||||
});
|
||||
|
||||
this.addLazyGetter({
|
||||
name: "GeckoViewPrompt",
|
||||
service: "@mozilla.org/prompter;1",
|
||||
mm: [
|
||||
"GeckoView:Prompt",
|
||||
],
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
case "chrome-document-global-created":
|
||||
case "content-document-global-created": {
|
||||
let win = aSubject.QueryInterface(Ci.nsIInterfaceRequestor)
|
||||
.getInterface(Ci.nsIDocShell).QueryInterface(Ci.nsIDocShellTreeItem)
|
||||
.rootTreeItem.QueryInterface(Ci.nsIInterfaceRequestor)
|
||||
.getInterface(Ci.nsIDOMWindow);
|
||||
if (win !== aSubject) {
|
||||
// Only attach to top-level windows.
|
||||
return;
|
||||
}
|
||||
|
||||
this.addLazyEventListener({
|
||||
name: "GeckoViewPrompt",
|
||||
target: win,
|
||||
events: [
|
||||
"click",
|
||||
"contextmenu",
|
||||
],
|
||||
options: {
|
||||
capture: false,
|
||||
mozSystemGroup: true,
|
||||
},
|
||||
});
|
||||
break;
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
this.NSGetFactory = XPCOMUtils.generateNSGetFactory([GeckoViewStartup]);
|
|
@ -8,5 +8,4 @@ EXTRA_COMPONENTS += [
|
|||
'GeckoView.manifest',
|
||||
'GeckoViewPermission.js',
|
||||
'GeckoViewPrompt.js',
|
||||
'GeckoViewStartup.js',
|
||||
]
|
||||
|
|
|
@ -526,7 +526,6 @@
|
|||
@BINPATH@/components/GeckoView.manifest
|
||||
@BINPATH@/components/GeckoViewPrompt.js
|
||||
@BINPATH@/components/GeckoViewPermission.js
|
||||
@BINPATH@/components/GeckoViewStartup.js
|
||||
#else
|
||||
@BINPATH@/chrome/chrome@JAREXT@
|
||||
@BINPATH@/chrome/chrome.manifest
|
||||
|
|
Загрузка…
Ссылка в новой задаче