зеркало из https://github.com/mozilla/gecko-dev.git
merge fx-team to mozilla-central a=merge
This commit is contained in:
Коммит
46f922660f
|
@ -196,6 +196,7 @@ let RemoteDebugger = {
|
||||||
globalActorFactories: restrictPrivileges ? {
|
globalActorFactories: restrictPrivileges ? {
|
||||||
webappsActor: DebuggerServer.globalActorFactories.webappsActor,
|
webappsActor: DebuggerServer.globalActorFactories.webappsActor,
|
||||||
deviceActor: DebuggerServer.globalActorFactories.deviceActor,
|
deviceActor: DebuggerServer.globalActorFactories.deviceActor,
|
||||||
|
settingsActor: DebuggerServer.globalActorFactories.settingsActor
|
||||||
} : DebuggerServer.globalActorFactories
|
} : DebuggerServer.globalActorFactories
|
||||||
};
|
};
|
||||||
let { RootActor } = devtools.require("devtools/server/actors/root");
|
let { RootActor } = devtools.require("devtools/server/actors/root");
|
||||||
|
|
|
@ -329,11 +329,6 @@ loop.panel = (function(_, mozL10n) {
|
||||||
render: function() {
|
render: function() {
|
||||||
var cx = React.addons.classSet;
|
var cx = React.addons.classSet;
|
||||||
|
|
||||||
// For now all of the menu entries require FxA so hide the whole gear if FxA is disabled.
|
|
||||||
if (!navigator.mozLoop.fxAEnabled) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
React.createElement("div", {className: "settings-menu dropdown"},
|
React.createElement("div", {className: "settings-menu dropdown"},
|
||||||
React.createElement("a", {className: "button-settings", onClick: this.showDropdownMenu,
|
React.createElement("a", {className: "button-settings", onClick: this.showDropdownMenu,
|
||||||
|
@ -347,7 +342,7 @@ loop.panel = (function(_, mozL10n) {
|
||||||
React.createElement(SettingsDropdownEntry, {label: mozL10n.get("settings_menu_item_account"),
|
React.createElement(SettingsDropdownEntry, {label: mozL10n.get("settings_menu_item_account"),
|
||||||
onClick: this.handleClickAccountEntry,
|
onClick: this.handleClickAccountEntry,
|
||||||
icon: "account",
|
icon: "account",
|
||||||
displayed: this._isSignedIn()}),
|
displayed: this._isSignedIn() && navigator.mozLoop.fxAEnabled}),
|
||||||
React.createElement(SettingsDropdownEntry, {icon: "tour",
|
React.createElement(SettingsDropdownEntry, {icon: "tour",
|
||||||
label: mozL10n.get("tour_label"),
|
label: mozL10n.get("tour_label"),
|
||||||
onClick: this.openGettingStartedTour}),
|
onClick: this.openGettingStartedTour}),
|
||||||
|
|
|
@ -329,11 +329,6 @@ loop.panel = (function(_, mozL10n) {
|
||||||
render: function() {
|
render: function() {
|
||||||
var cx = React.addons.classSet;
|
var cx = React.addons.classSet;
|
||||||
|
|
||||||
// For now all of the menu entries require FxA so hide the whole gear if FxA is disabled.
|
|
||||||
if (!navigator.mozLoop.fxAEnabled) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="settings-menu dropdown">
|
<div className="settings-menu dropdown">
|
||||||
<a className="button-settings" onClick={this.showDropdownMenu}
|
<a className="button-settings" onClick={this.showDropdownMenu}
|
||||||
|
@ -347,7 +342,7 @@ loop.panel = (function(_, mozL10n) {
|
||||||
<SettingsDropdownEntry label={mozL10n.get("settings_menu_item_account")}
|
<SettingsDropdownEntry label={mozL10n.get("settings_menu_item_account")}
|
||||||
onClick={this.handleClickAccountEntry}
|
onClick={this.handleClickAccountEntry}
|
||||||
icon="account"
|
icon="account"
|
||||||
displayed={this._isSignedIn()} />
|
displayed={this._isSignedIn() && navigator.mozLoop.fxAEnabled} />
|
||||||
<SettingsDropdownEntry icon="tour"
|
<SettingsDropdownEntry icon="tour"
|
||||||
label={mozL10n.get("tour_label")}
|
label={mozL10n.get("tour_label")}
|
||||||
onClick={this.openGettingStartedTour} />
|
onClick={this.openGettingStartedTour} />
|
||||||
|
|
|
@ -260,6 +260,17 @@ describe("loop.panel", function() {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("should hide the account entry when FxA is not enabled", function() {
|
||||||
|
navigator.mozLoop.userProfile = {email: "test@example.com"};
|
||||||
|
navigator.mozLoop.fxAEnabled = false;
|
||||||
|
|
||||||
|
var view = TestUtils.renderIntoDocument(
|
||||||
|
React.createElement(loop.panel.SettingsDropdown));
|
||||||
|
|
||||||
|
expect(view.getDOMNode().querySelectorAll(".icon-account"))
|
||||||
|
.to.have.length.of(0);
|
||||||
|
});
|
||||||
|
|
||||||
describe("SettingsDropdown", function() {
|
describe("SettingsDropdown", function() {
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
navigator.mozLoop.logInToFxA = sandbox.stub();
|
navigator.mozLoop.logInToFxA = sandbox.stub();
|
||||||
|
@ -271,14 +282,6 @@ describe("loop.panel", function() {
|
||||||
navigator.mozLoop.fxAEnabled = true;
|
navigator.mozLoop.fxAEnabled = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should be hidden if FxA is not enabled",
|
|
||||||
function() {
|
|
||||||
navigator.mozLoop.fxAEnabled = false;
|
|
||||||
var view = TestUtils.renderIntoDocument(
|
|
||||||
React.createElement(loop.panel.SettingsDropdown));
|
|
||||||
expect(view.getDOMNode()).to.be.null;
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should show a signin entry when user is not authenticated",
|
it("should show a signin entry when user is not authenticated",
|
||||||
function() {
|
function() {
|
||||||
navigator.mozLoop.loggedInToFxA = false;
|
navigator.mozLoop.loggedInToFxA = false;
|
||||||
|
|
|
@ -86,6 +86,7 @@ support-files =
|
||||||
doc_scope-variable-3.html
|
doc_scope-variable-3.html
|
||||||
doc_scope-variable-4.html
|
doc_scope-variable-4.html
|
||||||
doc_script-eval.html
|
doc_script-eval.html
|
||||||
|
doc_script-bookmarklet.html
|
||||||
doc_script-switching-01.html
|
doc_script-switching-01.html
|
||||||
doc_script-switching-02.html
|
doc_script-switching-02.html
|
||||||
doc_split-console-paused-reload.html
|
doc_split-console-paused-reload.html
|
||||||
|
@ -413,6 +414,8 @@ skip-if = e10s && debug
|
||||||
skip-if = e10s && debug
|
skip-if = e10s && debug
|
||||||
[browser_dbg_sources-sorting.js]
|
[browser_dbg_sources-sorting.js]
|
||||||
skip-if = e10s && debug
|
skip-if = e10s && debug
|
||||||
|
[browser_dbg_sources-bookmarklet.js]
|
||||||
|
skip-if = e10s && debug
|
||||||
[browser_dbg_split-console-paused-reload.js]
|
[browser_dbg_split-console-paused-reload.js]
|
||||||
skip-if = e10s && debug
|
skip-if = e10s && debug
|
||||||
[browser_dbg_stack-01.js]
|
[browser_dbg_stack-01.js]
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
/* Any copyright is dedicated to the Public Domain.
|
||||||
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make sure javascript bookmarklet scripts appear and load correctly in the source list
|
||||||
|
*/
|
||||||
|
|
||||||
|
const TAB_URL = EXAMPLE_URL + "doc_script-bookmarklet.html";
|
||||||
|
|
||||||
|
const BOOKMARKLET_SCRIPT_CODE = "console.log('bookmarklet executed');";
|
||||||
|
|
||||||
|
function test() {
|
||||||
|
let gTab, gPanel, gDebugger;
|
||||||
|
let gSources, gBreakpoints;
|
||||||
|
|
||||||
|
initDebugger(TAB_URL).then(([aTab,, aPanel]) => {
|
||||||
|
gTab = aTab;
|
||||||
|
gPanel = aPanel;
|
||||||
|
gDebugger = gPanel.panelWin;
|
||||||
|
gSources = gDebugger.DebuggerView.Sources;
|
||||||
|
gBreakpoints = gDebugger.DebuggerController.Breakpoints;
|
||||||
|
|
||||||
|
return Task.spawn(function*() {
|
||||||
|
let waitForSource = waitForDebuggerEvents(gPanel, gPanel.panelWin.EVENTS.NEW_SOURCE, 1);
|
||||||
|
|
||||||
|
// NOTE: devtools debugger panel needs to be already open,
|
||||||
|
// or the bookmarklet script will not be shown in the sources panel
|
||||||
|
callInTab(gTab, "injectBookmarklet", BOOKMARKLET_SCRIPT_CODE);
|
||||||
|
|
||||||
|
yield waitForSource;
|
||||||
|
|
||||||
|
is(gSources.values.length, 2, "Should have 2 source");
|
||||||
|
|
||||||
|
let item = gSources.getItemForAttachment(e => {
|
||||||
|
return e.label.indexOf("javascript:") === 0;
|
||||||
|
});
|
||||||
|
ok(item, "Source label is incorrect.");
|
||||||
|
|
||||||
|
let res = yield promiseInvoke(gDebugger.DebuggerController.client,
|
||||||
|
gDebugger.DebuggerController.client.request,
|
||||||
|
{ to: item.value, type: "source"});
|
||||||
|
|
||||||
|
ok(res && res.source == BOOKMARKLET_SCRIPT_CODE, "SourceActor reply received");
|
||||||
|
is(res.source, BOOKMARKLET_SCRIPT_CODE, "source is correct");
|
||||||
|
is(res.contentType, "text/javascript", "contentType is correct");
|
||||||
|
|
||||||
|
yield closeDebuggerAndFinish(gPanel);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
<!-- Any copyright is dedicated to the Public Domain.
|
||||||
|
http://creativecommons.org/publicdomain/zero/1.0/ -->
|
||||||
|
<!doctype html>
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8"/>
|
||||||
|
<title>Debugger test page</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<script>function injectBookmarklet(bookmarklet) { setTimeout(function() { window.location = "javascript:" + bookmarklet; }, 0); }</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,603 @@
|
||||||
|
/* 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";
|
||||||
|
|
||||||
|
const { Ci, Cc } = require("chrome");
|
||||||
|
const { Services } = require("resource://gre/modules/Services.jsm");
|
||||||
|
const Strings = Services.strings.createBundle("chrome://browser/locale/devtools/device.properties");
|
||||||
|
|
||||||
|
/* `Devices` is a catalog of existing devices and their properties, intended
|
||||||
|
* for (mobile) device emulation tools and features.
|
||||||
|
*
|
||||||
|
* The properties of a device are:
|
||||||
|
* - name: Device brand and model(s).
|
||||||
|
* - width: Viewport width.
|
||||||
|
* - height: Viewport height.
|
||||||
|
* - pixelRatio: Screen pixel ratio to viewport.
|
||||||
|
* - userAgent: Device UserAgent string.
|
||||||
|
* - touch: Whether the screen is touch-enabled.
|
||||||
|
*
|
||||||
|
* To add more devices to this catalog, either patch this file, or push new
|
||||||
|
* device descriptions from your own code (e.g. an addon) like so:
|
||||||
|
*
|
||||||
|
* var myPhone = { name: "My Phone", ... };
|
||||||
|
* require("devtools/shared/devices").Devices.Others.phones.push(myPhone);
|
||||||
|
*/
|
||||||
|
|
||||||
|
let Devices = {
|
||||||
|
Types: ["phones", "tablets", "notebooks", "televisions", "watches"],
|
||||||
|
|
||||||
|
// Get the localized string of a device type.
|
||||||
|
GetString(deviceType) {
|
||||||
|
return Strings.GetStringFromName("device." + deviceType);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
exports.Devices = Devices;
|
||||||
|
|
||||||
|
|
||||||
|
// The `Devices.FirefoxOS` list was put together from various sources online.
|
||||||
|
Devices.FirefoxOS = {
|
||||||
|
phones: [
|
||||||
|
{
|
||||||
|
name: "Firefox OS Flame",
|
||||||
|
width: 320,
|
||||||
|
height: 570,
|
||||||
|
pixelRatio: 1.5,
|
||||||
|
userAgent: "Mozilla/5.0 (Mobile; rv:28.0) Gecko/28.0 Firefox/28.0",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Alcatel One Touch Fire, Fire C",
|
||||||
|
width: 320,
|
||||||
|
height: 480,
|
||||||
|
pixelRatio: 1,
|
||||||
|
userAgent: "Mozilla/5.0 (Mobile; ALCATELOneTouch4012X; rv:28.0) Gecko/28.0 Firefox/28.0",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Alcatel Fire E",
|
||||||
|
width: 320,
|
||||||
|
height: 480,
|
||||||
|
pixelRatio: 2,
|
||||||
|
userAgent: "Mozilla/5.0 (Mobile; ALCATELOneTouch4012X; rv:28.0) Gecko/28.0 Firefox/28.0",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Geeksphone Keon",
|
||||||
|
width: 320,
|
||||||
|
height: 480,
|
||||||
|
pixelRatio: 1,
|
||||||
|
userAgent: "Mozilla/5.0 (Mobile; rv:28.0) Gecko/28.0 Firefox/28.0",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Geeksphone Peak, Revolution",
|
||||||
|
width: 360,
|
||||||
|
height: 640,
|
||||||
|
pixelRatio: 1.5,
|
||||||
|
userAgent: "Mozilla/5.0 (Mobile; rv:28.0) Gecko/28.0 Firefox/28.0",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Intex Cloud Fx",
|
||||||
|
width: 320,
|
||||||
|
height: 480,
|
||||||
|
pixelRatio: 1,
|
||||||
|
userAgent: "Mozilla/5.0 (Mobile; rv:28.0) Gecko/28.0 Firefox/28.0",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "LG Fireweb",
|
||||||
|
width: 320,
|
||||||
|
height: 480,
|
||||||
|
pixelRatio: 1,
|
||||||
|
userAgent: "Mozilla/5.0 (Mobile; LG-D300; rv:28.0) Gecko/28.0 Firefox/28.0",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Spice Fire One Mi-FX1",
|
||||||
|
width: 320,
|
||||||
|
height: 480,
|
||||||
|
pixelRatio: 1,
|
||||||
|
userAgent: "Mozilla/5.0 (Mobile; rv:28.0) Gecko/28.0 Firefox/28.0",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Symphony GoFox F15",
|
||||||
|
width: 320,
|
||||||
|
height: 480,
|
||||||
|
pixelRatio: 1,
|
||||||
|
userAgent: "Mozilla/5.0 (Mobile; rv:28.0) Gecko/28.0 Firefox/28.0",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Zen Fire 105",
|
||||||
|
width: 320,
|
||||||
|
height: 480,
|
||||||
|
pixelRatio: 1,
|
||||||
|
userAgent: "Mozilla/5.0 (Mobile; rv:28.0) Gecko/28.0 Firefox/28.0",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "ZTE Open",
|
||||||
|
width: 320,
|
||||||
|
height: 480,
|
||||||
|
pixelRatio: 1,
|
||||||
|
userAgent: "Mozilla/5.0 (Mobile; ZTEOPEN; rv:28.0) Gecko/28.0 Firefox/28.0",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "ZTE Open C",
|
||||||
|
width: 320,
|
||||||
|
height: 450,
|
||||||
|
pixelRatio: 1.5,
|
||||||
|
userAgent: "Mozilla/5.0 (Mobile; OPENC; rv:28.0) Gecko/28.0 Firefox/28.0",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
tablets: [
|
||||||
|
{
|
||||||
|
name: "Foxconn InFocus",
|
||||||
|
width: 1280,
|
||||||
|
height: 800,
|
||||||
|
pixelRatio: 1,
|
||||||
|
userAgent: "Mozilla/5.0 (Mobile; rv:28.0) Gecko/28.0 Firefox/28.0",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "VIA Vixen",
|
||||||
|
width: 1024,
|
||||||
|
height: 600,
|
||||||
|
pixelRatio: 1,
|
||||||
|
userAgent: "Mozilla/5.0 (Mobile; rv:28.0) Gecko/28.0 Firefox/28.0",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
notebooks: [
|
||||||
|
],
|
||||||
|
televisions: [
|
||||||
|
{
|
||||||
|
name: "720p HD Television",
|
||||||
|
width: 1280,
|
||||||
|
height: 720,
|
||||||
|
pixelRatio: 1,
|
||||||
|
userAgent: "",
|
||||||
|
touch: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1080p Full HD Television",
|
||||||
|
width: 1920,
|
||||||
|
height: 1080,
|
||||||
|
pixelRatio: 1,
|
||||||
|
userAgent: "",
|
||||||
|
touch: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "4K Ultra HD Television",
|
||||||
|
width: 3840,
|
||||||
|
height: 2160,
|
||||||
|
pixelRatio: 1,
|
||||||
|
userAgent: "",
|
||||||
|
touch: false,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
watches: [
|
||||||
|
{
|
||||||
|
name: "LG G Watch",
|
||||||
|
width: 280,
|
||||||
|
height: 280,
|
||||||
|
pixelRatio: 1,
|
||||||
|
userAgent: "",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "LG G Watch R",
|
||||||
|
width: 320,
|
||||||
|
height: 320,
|
||||||
|
pixelRatio: 1,
|
||||||
|
userAgent: "",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Moto 360",
|
||||||
|
width: 320,
|
||||||
|
height: 290,
|
||||||
|
pixelRatio: 1,
|
||||||
|
userAgent: "",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Samsung Gear Live",
|
||||||
|
width: 320,
|
||||||
|
height: 320,
|
||||||
|
pixelRatio: 1,
|
||||||
|
userAgent: "",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
// `Devices.Others` was derived from the Chromium source code:
|
||||||
|
// - chromium/src/third_party/WebKit/Source/devtools/front_end/toolbox/OverridesUI.js
|
||||||
|
Devices.Others = {
|
||||||
|
phones: [
|
||||||
|
{
|
||||||
|
name: "Apple iPhone 3GS",
|
||||||
|
width: 320,
|
||||||
|
height: 480,
|
||||||
|
pixelRatio: 1,
|
||||||
|
userAgent: "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Apple iPhone 4",
|
||||||
|
width: 320,
|
||||||
|
height: 480,
|
||||||
|
pixelRatio: 2,
|
||||||
|
userAgent: "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Apple iPhone 5",
|
||||||
|
width: 320,
|
||||||
|
height: 568,
|
||||||
|
pixelRatio: 2,
|
||||||
|
userAgent: "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X; en-us) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Apple iPhone 6",
|
||||||
|
width: 375,
|
||||||
|
height: 667,
|
||||||
|
pixelRatio: 2,
|
||||||
|
userAgent: "Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.3 (KHTML, like Gecko) Version/8.0 Mobile/12A4345d Safari/600.1.4",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Apple iPhone 6 Plus",
|
||||||
|
width: 414,
|
||||||
|
height: 736,
|
||||||
|
pixelRatio: 3,
|
||||||
|
userAgent: "Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.3 (KHTML, like Gecko) Version/8.0 Mobile/12A4345d Safari/600.1.4",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "BlackBerry Z10",
|
||||||
|
width: 384,
|
||||||
|
height: 640,
|
||||||
|
pixelRatio: 2,
|
||||||
|
userAgent: "Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "BlackBerry Z30",
|
||||||
|
width: 360,
|
||||||
|
height: 640,
|
||||||
|
pixelRatio: 2,
|
||||||
|
userAgent: "Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Google Nexus 4",
|
||||||
|
width: 384,
|
||||||
|
height: 640,
|
||||||
|
pixelRatio: 2,
|
||||||
|
userAgent: "Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 4 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Google Nexus 5",
|
||||||
|
width: 360,
|
||||||
|
height: 640,
|
||||||
|
pixelRatio: 3,
|
||||||
|
userAgent: "Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 5 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Google Nexus S",
|
||||||
|
width: 320,
|
||||||
|
height: 533,
|
||||||
|
pixelRatio: 1.5,
|
||||||
|
userAgent: "Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Nexus S Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "HTC Evo, Touch HD, Desire HD, Desire",
|
||||||
|
width: 320,
|
||||||
|
height: 533,
|
||||||
|
pixelRatio: 1.5,
|
||||||
|
userAgent: "Mozilla/5.0 (Linux; U; Android 2.2; en-us; Sprint APA9292KT Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "HTC One X, EVO LTE",
|
||||||
|
width: 360,
|
||||||
|
height: 640,
|
||||||
|
pixelRatio: 2,
|
||||||
|
userAgent: "Mozilla/5.0 (Linux; Android 4.0.3; HTC One X Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "HTC Sensation, Evo 3D",
|
||||||
|
width: 360,
|
||||||
|
height: 640,
|
||||||
|
pixelRatio: 1.5,
|
||||||
|
userAgent: "Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; HTC Sensation Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "LG Optimus 2X, Optimus 3D, Optimus Black",
|
||||||
|
width: 320,
|
||||||
|
height: 533,
|
||||||
|
pixelRatio: 1.5,
|
||||||
|
userAgent: "Mozilla/5.0 (Linux; U; Android 2.2; en-us; LG-P990/V08c Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MMS/LG-Android-MMS-V1.0/1.2",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "LG Optimus G",
|
||||||
|
width: 384,
|
||||||
|
height: 640,
|
||||||
|
pixelRatio: 2,
|
||||||
|
userAgent: "Mozilla/5.0 (Linux; Android 4.0; LG-E975 Build/IMM76L) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "LG Optimus LTE, Optimus 4X HD",
|
||||||
|
width: 424,
|
||||||
|
height: 753,
|
||||||
|
pixelRatio: 1.7,
|
||||||
|
userAgent: "Mozilla/5.0 (Linux; U; Android 2.3; en-us; LG-P930 Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "LG Optimus One",
|
||||||
|
width: 213,
|
||||||
|
height: 320,
|
||||||
|
pixelRatio: 1.5,
|
||||||
|
userAgent: "Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; LG-MS690 Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Motorola Defy, Droid, Droid X, Milestone",
|
||||||
|
width: 320,
|
||||||
|
height: 569,
|
||||||
|
pixelRatio: 1.5,
|
||||||
|
userAgent: "Mozilla/5.0 (Linux; U; Android 2.0; en-us; Milestone Build/ SHOLS_U2_01.03.1) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Motorola Droid 3, Droid 4, Droid Razr, Atrix 4G, Atrix 2",
|
||||||
|
width: 540,
|
||||||
|
height: 960,
|
||||||
|
pixelRatio: 1,
|
||||||
|
userAgent: "Mozilla/5.0 (Linux; U; Android 2.2; en-us; Droid Build/FRG22D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Motorola Droid Razr HD",
|
||||||
|
width: 720,
|
||||||
|
height: 1280,
|
||||||
|
pixelRatio: 1,
|
||||||
|
userAgent: "Mozilla/5.0 (Linux; U; Android 2.3; en-us; DROID RAZR 4G Build/6.5.1-73_DHD-11_M1-29) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Nokia C5, C6, C7, N97, N8, X7",
|
||||||
|
width: 360,
|
||||||
|
height: 640,
|
||||||
|
pixelRatio: 1,
|
||||||
|
userAgent: "NokiaN97/21.1.107 (SymbianOS/9.4; Series60/5.0 Mozilla/5.0; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebkit/525 (KHTML, like Gecko) BrowserNG/7.1.4",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Nokia Lumia 7X0, Lumia 8XX, Lumia 900, N800, N810, N900",
|
||||||
|
width: 320,
|
||||||
|
height: 533,
|
||||||
|
pixelRatio: 1.5,
|
||||||
|
userAgent: "Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 820)",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Samsung Galaxy Note 3",
|
||||||
|
width: 360,
|
||||||
|
height: 640,
|
||||||
|
pixelRatio: 3,
|
||||||
|
userAgent: "Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Samsung Galaxy Note II",
|
||||||
|
width: 360,
|
||||||
|
height: 640,
|
||||||
|
pixelRatio: 2,
|
||||||
|
userAgent: "Mozilla/5.0 (Linux; U; Android 4.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Samsung Galaxy Note",
|
||||||
|
width: 400,
|
||||||
|
height: 640,
|
||||||
|
pixelRatio: 2,
|
||||||
|
userAgent: "Mozilla/5.0 (Linux; U; Android 2.3; en-us; SAMSUNG-SGH-I717 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Samsung Galaxy S III, Galaxy Nexus",
|
||||||
|
width: 360,
|
||||||
|
height: 640,
|
||||||
|
pixelRatio: 2,
|
||||||
|
userAgent: "Mozilla/5.0 (Linux; U; Android 4.0; en-us; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Samsung Galaxy S, S II, W",
|
||||||
|
width: 320,
|
||||||
|
height: 533,
|
||||||
|
pixelRatio: 1.5,
|
||||||
|
userAgent: "Mozilla/5.0 (Linux; U; Android 2.1; en-us; GT-I9000 Build/ECLAIR) AppleWebKit/525.10+ (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Samsung Galaxy S4",
|
||||||
|
width: 360,
|
||||||
|
height: 640,
|
||||||
|
pixelRatio: 3,
|
||||||
|
userAgent: "Mozilla/5.0 (Linux; Android 4.2.2; GT-I9505 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.59 Mobile Safari/537.36",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Sony Xperia S, Ion",
|
||||||
|
width: 360,
|
||||||
|
height: 640,
|
||||||
|
pixelRatio: 2,
|
||||||
|
userAgent: "Mozilla/5.0 (Linux; U; Android 4.0; en-us; LT28at Build/6.1.C.1.111) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Sony Xperia Sola, U",
|
||||||
|
width: 480,
|
||||||
|
height: 854,
|
||||||
|
pixelRatio: 1,
|
||||||
|
userAgent: "Mozilla/5.0 (Linux; U; Android 2.3; en-us; SonyEricssonST25i Build/6.0.B.1.564) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Sony Xperia Z, Z1",
|
||||||
|
width: 360,
|
||||||
|
height: 640,
|
||||||
|
pixelRatio: 3,
|
||||||
|
userAgent: "Mozilla/5.0 (Linux; U; Android 4.2; en-us; SonyC6903 Build/14.1.G.1.518) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
tablets: [
|
||||||
|
{
|
||||||
|
name: "Amazon Kindle Fire HDX 7″",
|
||||||
|
width: 1920,
|
||||||
|
height: 1200,
|
||||||
|
pixelRatio: 2,
|
||||||
|
userAgent: "Mozilla/5.0 (Linux; U; en-us; KFTHWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Amazon Kindle Fire HDX 8.9″",
|
||||||
|
width: 2560,
|
||||||
|
height: 1600,
|
||||||
|
pixelRatio: 2,
|
||||||
|
userAgent: "Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Amazon Kindle Fire (First Generation)",
|
||||||
|
width: 1024,
|
||||||
|
height: 600,
|
||||||
|
pixelRatio: 1,
|
||||||
|
userAgent: "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us; Silk/1.0.141.16-Gen4_11004310) AppleWebkit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 Silk-Accelerated=true",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Apple iPad 1 / 2 / iPad Mini",
|
||||||
|
width: 1024,
|
||||||
|
height: 768,
|
||||||
|
pixelRatio: 1,
|
||||||
|
userAgent: "Mozilla/5.0 (iPad; CPU OS 4_3_5 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8L1 Safari/6533.18.5",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Apple iPad 3 / 4",
|
||||||
|
width: 1024,
|
||||||
|
height: 768,
|
||||||
|
pixelRatio: 2,
|
||||||
|
userAgent: "Mozilla/5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "BlackBerry PlayBook",
|
||||||
|
width: 1024,
|
||||||
|
height: 600,
|
||||||
|
pixelRatio: 1,
|
||||||
|
userAgent: "Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/7.2.1.0 Safari/536.2+",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Google Nexus 10",
|
||||||
|
width: 1280,
|
||||||
|
height: 800,
|
||||||
|
pixelRatio: 2,
|
||||||
|
userAgent: "Mozilla/5.0 (Linux; Android 4.3; Nexus 10 Build/JSS15Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.72 Safari/537.36",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Google Nexus 7 2",
|
||||||
|
width: 960,
|
||||||
|
height: 600,
|
||||||
|
pixelRatio: 2,
|
||||||
|
userAgent: "Mozilla/5.0 (Linux; Android 4.3; Nexus 7 Build/JSS15Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.72 Safari/537.36",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Google Nexus 7",
|
||||||
|
width: 966,
|
||||||
|
height: 604,
|
||||||
|
pixelRatio: 1.325,
|
||||||
|
userAgent: "Mozilla/5.0 (Linux; Android 4.3; Nexus 7 Build/JSS15Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.72 Safari/537.36",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Motorola Xoom, Xyboard",
|
||||||
|
width: 1280,
|
||||||
|
height: 800,
|
||||||
|
pixelRatio: 1,
|
||||||
|
userAgent: "Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/525.10 (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Samsung Galaxy Tab 7.7, 8.9, 10.1",
|
||||||
|
width: 1280,
|
||||||
|
height: 800,
|
||||||
|
pixelRatio: 1,
|
||||||
|
userAgent: "Mozilla/5.0 (Linux; U; Android 2.2; en-us; SCH-I800 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Samsung Galaxy Tab",
|
||||||
|
width: 1024,
|
||||||
|
height: 600,
|
||||||
|
pixelRatio: 1,
|
||||||
|
userAgent: "Mozilla/5.0 (Linux; U; Android 2.2; en-us; SCH-I800 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
notebooks: [
|
||||||
|
{
|
||||||
|
name: "Notebook with touch",
|
||||||
|
width: 1280,
|
||||||
|
height: 950,
|
||||||
|
pixelRatio: 1,
|
||||||
|
userAgent: "",
|
||||||
|
touch: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Notebook with HiDPI screen",
|
||||||
|
width: 1440,
|
||||||
|
height: 900,
|
||||||
|
pixelRatio: 2,
|
||||||
|
userAgent: "",
|
||||||
|
touch: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Generic notebook",
|
||||||
|
width: 1280,
|
||||||
|
height: 800,
|
||||||
|
pixelRatio: 1,
|
||||||
|
userAgent: "",
|
||||||
|
touch: false,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
televisions: [
|
||||||
|
],
|
||||||
|
watches: [
|
||||||
|
],
|
||||||
|
};
|
|
@ -48,6 +48,7 @@ EXTRA_JS_MODULES.devtools.shared.timeline += [
|
||||||
EXTRA_JS_MODULES.devtools.shared += [
|
EXTRA_JS_MODULES.devtools.shared += [
|
||||||
'autocomplete-popup.js',
|
'autocomplete-popup.js',
|
||||||
'd3.js',
|
'd3.js',
|
||||||
|
'devices.js',
|
||||||
'doorhanger.js',
|
'doorhanger.js',
|
||||||
'frame-script-utils.js',
|
'frame-script-utils.js',
|
||||||
'inplace-editor.js',
|
'inplace-editor.js',
|
||||||
|
|
|
@ -37,7 +37,6 @@ add_task(function*() {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
function* testLivePreviewData(data, ruleView, selector) {
|
function* testLivePreviewData(data, ruleView, selector) {
|
||||||
let testElement = getNode(selector);
|
let testElement = getNode(selector);
|
||||||
let idRuleEditor = getRuleViewRuleEditor(ruleView, 1);
|
let idRuleEditor = getRuleViewRuleEditor(ruleView, 1);
|
||||||
|
@ -57,10 +56,13 @@ function* testLivePreviewData(data, ruleView, selector) {
|
||||||
EventUtils.synthesizeKey("VK_RETURN", {});
|
EventUtils.synthesizeKey("VK_RETURN", {});
|
||||||
}
|
}
|
||||||
|
|
||||||
// This wait is an orange waiting to happen, but it might take a few event
|
// Wait for the modifyproperties request to complete before
|
||||||
// loop spins in either the client or parent process before we see the
|
// checking the computed style.
|
||||||
// updated value.
|
for (let rule of ruleView._elementStyle.rules) {
|
||||||
yield wait(1);
|
if (rule._applyingModifications) {
|
||||||
|
yield rule._applyingModifications;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// While the editor is still focused in, the display should have changed already
|
// While the editor is still focused in, the display should have changed already
|
||||||
is((yield getComputedStyleProperty(selector, null, "display")),
|
is((yield getComputedStyleProperty(selector, null, "display")),
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
# 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/.
|
||||||
|
|
||||||
|
# LOCALIZATION NOTE These strings are used inside Device Emulation developer
|
||||||
|
# tools. The correct localization of this file might be to keep it in English,
|
||||||
|
# or another language commonly spoken among web developers. You want to make
|
||||||
|
# that choice consistent across the developer tools. A good criteria is the
|
||||||
|
# language in which you'd find the best documentation on web development on the
|
||||||
|
# web.
|
||||||
|
|
||||||
|
# LOCALIZATION NOTE:
|
||||||
|
# These strings are category names in a list of devices that a user can choose
|
||||||
|
# to simulate (e.g. "ZTE Open C", "VIA Vixen", "720p HD Television", etc).
|
||||||
|
device.phones=Phones
|
||||||
|
device.tablets=Tablets
|
||||||
|
device.notebooks=Notebooks
|
||||||
|
device.televisions=TVs
|
||||||
|
device.watches=Watches
|
|
@ -33,6 +33,7 @@
|
||||||
locale/browser/devtools/appcacheutils.properties (%chrome/browser/devtools/appcacheutils.properties)
|
locale/browser/devtools/appcacheutils.properties (%chrome/browser/devtools/appcacheutils.properties)
|
||||||
locale/browser/devtools/debugger.dtd (%chrome/browser/devtools/debugger.dtd)
|
locale/browser/devtools/debugger.dtd (%chrome/browser/devtools/debugger.dtd)
|
||||||
locale/browser/devtools/debugger.properties (%chrome/browser/devtools/debugger.properties)
|
locale/browser/devtools/debugger.properties (%chrome/browser/devtools/debugger.properties)
|
||||||
|
locale/browser/devtools/device.properties (%chrome/browser/devtools/device.properties)
|
||||||
locale/browser/devtools/netmonitor.dtd (%chrome/browser/devtools/netmonitor.dtd)
|
locale/browser/devtools/netmonitor.dtd (%chrome/browser/devtools/netmonitor.dtd)
|
||||||
locale/browser/devtools/netmonitor.properties (%chrome/browser/devtools/netmonitor.properties)
|
locale/browser/devtools/netmonitor.properties (%chrome/browser/devtools/netmonitor.properties)
|
||||||
locale/browser/devtools/shadereditor.dtd (%chrome/browser/devtools/shadereditor.dtd)
|
locale/browser/devtools/shadereditor.dtd (%chrome/browser/devtools/shadereditor.dtd)
|
||||||
|
|
|
@ -355,6 +355,14 @@ body {
|
||||||
background-position: center;
|
background-position: center;
|
||||||
background-size: 30px 24px;
|
background-size: 30px 24px;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
|
background-color: transparent;
|
||||||
|
border: 0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Remove dotted border when button is focused */
|
||||||
|
.button::-moz-focus-inner {
|
||||||
|
border: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dropdown {
|
.dropdown {
|
||||||
|
|
|
@ -557,20 +557,49 @@ var LoginManagerContent = {
|
||||||
/*
|
/*
|
||||||
* _fillform
|
* _fillform
|
||||||
*
|
*
|
||||||
* Fill the form with login information if we can find it. This will find
|
* Fill the form with the provided login information.
|
||||||
* an array of logins if not given any, otherwise it will use the logins
|
* The logins are returned so they can be reused for
|
||||||
* passed in. The logins are returned so they can be reused for
|
|
||||||
* optimization. Success of action is also returned in format
|
* optimization. Success of action is also returned in format
|
||||||
* [success, foundLogins].
|
* [success, foundLogins].
|
||||||
*
|
*
|
||||||
* - autofillForm denotes if we should fill the form in automatically
|
* - autofillForm denotes if we should fill the form in automatically
|
||||||
* - userTriggered is an indication of whether this filling was triggered by
|
* - userTriggered is an indication of whether this filling was triggered by
|
||||||
* the user
|
* the user
|
||||||
* - foundLogins is an array of nsILoginInfo for optimization
|
* - foundLogins is an array of nsILoginInfo
|
||||||
*/
|
*/
|
||||||
_fillForm : function (form, autofillForm, clobberPassword,
|
_fillForm : function (form, autofillForm, clobberPassword,
|
||||||
userTriggered, foundLogins) {
|
userTriggered, foundLogins) {
|
||||||
let ignoreAutocomplete = true;
|
let ignoreAutocomplete = true;
|
||||||
|
const AUTOFILL_RESULT = {
|
||||||
|
FILLED: 0,
|
||||||
|
NO_PASSWORD_FIELD: 1,
|
||||||
|
PASSWORD_DISABLED_READONLY: 2,
|
||||||
|
NO_LOGINS_FIT: 3,
|
||||||
|
NO_SAVED_LOGINS: 4,
|
||||||
|
EXISTING_PASSWORD: 5,
|
||||||
|
EXISTING_USERNAME: 6,
|
||||||
|
MULTIPLE_LOGINS: 7,
|
||||||
|
NO_AUTOFILL_FORMS: 8,
|
||||||
|
AUTOCOMPLETE_OFF: 9,
|
||||||
|
UNKNOWN_FAILURE: 10,
|
||||||
|
};
|
||||||
|
|
||||||
|
function recordAutofillResult(result) {
|
||||||
|
if (userTriggered) {
|
||||||
|
// Ignore fills as a result of user action.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const autofillResultHist = Services.telemetry.getHistogramById("PWMGR_FORM_AUTOFILL_RESULT");
|
||||||
|
autofillResultHist.add(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Nothing to do if we have no matching logins available.
|
||||||
|
if (foundLogins.length == 0) {
|
||||||
|
// We don't log() here since this is a very common case.
|
||||||
|
recordAutofillResult(AUTOFILL_RESULT.NO_SAVED_LOGINS);
|
||||||
|
return [false, foundLogins];
|
||||||
|
}
|
||||||
|
|
||||||
// Heuristically determine what the user/pass fields are
|
// Heuristically determine what the user/pass fields are
|
||||||
// We do this before checking to see if logins are stored,
|
// We do this before checking to see if logins are stored,
|
||||||
// so that the user isn't prompted for a master password
|
// so that the user isn't prompted for a master password
|
||||||
|
@ -579,12 +608,16 @@ var LoginManagerContent = {
|
||||||
this._getFormFields(form, false);
|
this._getFormFields(form, false);
|
||||||
|
|
||||||
// Need a valid password field to do anything.
|
// Need a valid password field to do anything.
|
||||||
if (passwordField == null)
|
if (passwordField == null) {
|
||||||
|
log("not filling form, no password field found");
|
||||||
|
recordAutofillResult(AUTOFILL_RESULT.NO_PASSWORD_FIELD);
|
||||||
return [false, foundLogins];
|
return [false, foundLogins];
|
||||||
|
}
|
||||||
|
|
||||||
// If the password field is disabled or read-only, there's nothing to do.
|
// If the password field is disabled or read-only, there's nothing to do.
|
||||||
if (passwordField.disabled || passwordField.readOnly) {
|
if (passwordField.disabled || passwordField.readOnly) {
|
||||||
log("not filling form, password field disabled or read-only");
|
log("not filling form, password field disabled or read-only");
|
||||||
|
recordAutofillResult(AUTOFILL_RESULT.PASSWORD_DISABLED_READONLY);
|
||||||
return [false, foundLogins];
|
return [false, foundLogins];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -619,11 +652,11 @@ var LoginManagerContent = {
|
||||||
return fit;
|
return fit;
|
||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
|
if (logins.length == 0) {
|
||||||
// Nothing to do if we have no matching logins available.
|
log("form not filled, none of the logins fit in the field");
|
||||||
if (logins.length == 0)
|
recordAutofillResult(AUTOFILL_RESULT.NO_LOGINS_FIT);
|
||||||
return [false, foundLogins];
|
return [false, foundLogins];
|
||||||
|
}
|
||||||
|
|
||||||
// The reason we didn't end up filling the form, if any. We include
|
// The reason we didn't end up filling the form, if any. We include
|
||||||
// this in the formInfo object we send with the passwordmgr-found-logins
|
// this in the formInfo object we send with the passwordmgr-found-logins
|
||||||
|
@ -641,6 +674,8 @@ var LoginManagerContent = {
|
||||||
didntFillReason = "existingPassword";
|
didntFillReason = "existingPassword";
|
||||||
this._notifyFoundLogins(didntFillReason, usernameField,
|
this._notifyFoundLogins(didntFillReason, usernameField,
|
||||||
passwordField, foundLogins, null);
|
passwordField, foundLogins, null);
|
||||||
|
log("form not filled, the password field was already filled");
|
||||||
|
recordAutofillResult(AUTOFILL_RESULT.EXISTING_PASSWORD);
|
||||||
return [false, foundLogins];
|
return [false, foundLogins];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -744,6 +779,28 @@ var LoginManagerContent = {
|
||||||
this._notifyFoundLogins(didntFillReason, usernameField, passwordField,
|
this._notifyFoundLogins(didntFillReason, usernameField, passwordField,
|
||||||
foundLogins, selectedLogin);
|
foundLogins, selectedLogin);
|
||||||
|
|
||||||
|
if (didFillForm) {
|
||||||
|
recordAutofillResult(AUTOFILL_RESULT.FILLED);
|
||||||
|
} else {
|
||||||
|
let autofillResult = AUTOFILL_RESULT.UNKNOWN_FAILURE;
|
||||||
|
switch (didntFillReason) {
|
||||||
|
// existingPassword is already handled above
|
||||||
|
case "existingUsername":
|
||||||
|
autofillResult = AUTOFILL_RESULT.EXISTING_USERNAME;
|
||||||
|
break;
|
||||||
|
case "multipleLogins":
|
||||||
|
autofillResult = AUTOFILL_RESULT.MULTIPLE_LOGINS;
|
||||||
|
break;
|
||||||
|
case "noAutofillForms":
|
||||||
|
autofillResult = AUTOFILL_RESULT.NO_AUTOFILL_FORMS;
|
||||||
|
break;
|
||||||
|
case "autocompleteOff":
|
||||||
|
autofillResult = AUTOFILL_RESULT.AUTOCOMPLETE_OFF;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
recordAutofillResult(autofillResult);
|
||||||
|
}
|
||||||
|
|
||||||
return [didFillForm, foundLogins];
|
return [didFillForm, foundLogins];
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -25,10 +25,10 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<ul id="reader-toolbar" class="toolbar toolbar-hidden">
|
<ul id="reader-toolbar" class="toolbar toolbar-hidden">
|
||||||
<li><a id="close-button" class="button close-button" href="#"></a></li>
|
<li><button id="close-button" class="button close-button"/></li>
|
||||||
<li><a id="share-button" class="button share-button" href="#"></a></li>
|
<li><button id="share-button" class="button share-button"/></li>
|
||||||
<ul id="style-dropdown" class="dropdown">
|
<ul id="style-dropdown" class="dropdown">
|
||||||
<li><a class="dropdown-toggle button style-button" href="#"></a></li>
|
<li><button class="dropdown-toggle button style-button"/></li>
|
||||||
<li class="dropdown-popup">
|
<li class="dropdown-popup">
|
||||||
<ul id="font-type-buttons"></ul>
|
<ul id="font-type-buttons"></ul>
|
||||||
<hr></hr>
|
<hr></hr>
|
||||||
|
@ -38,8 +38,8 @@
|
||||||
<div class="dropdown-arrow"/>
|
<div class="dropdown-arrow"/>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<li><a id="toggle-button" class="button toggle-button" href="#"></a></li>
|
<li><button id="toggle-button" class="button toggle-button"/></li>
|
||||||
<li><a id="list-button" class="button list-button" href="#"></a></li>
|
<li><button id="list-button" class="button list-button"/></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
|
@ -7363,6 +7363,12 @@
|
||||||
"extended_statistics_ok": true,
|
"extended_statistics_ok": true,
|
||||||
"description": "The number of sites for which the user has explicitly rejected saving logins"
|
"description": "The number of sites for which the user has explicitly rejected saving logins"
|
||||||
},
|
},
|
||||||
|
"PWMGR_FORM_AUTOFILL_RESULT": {
|
||||||
|
"expires_in_version": "never",
|
||||||
|
"kind": "enumerated",
|
||||||
|
"n_values" : 20,
|
||||||
|
"description": "The result of auto-filling a login form. See http://mzl.la/1Mbs6jL for bucket descriptions."
|
||||||
|
},
|
||||||
"PWMGR_NUM_PASSWORDS_PER_HOSTNAME": {
|
"PWMGR_NUM_PASSWORDS_PER_HOSTNAME": {
|
||||||
"expires_in_version": "never",
|
"expires_in_version": "never",
|
||||||
"kind": "linear",
|
"kind": "linear",
|
||||||
|
|
|
@ -5319,6 +5319,12 @@ ThreadSources.prototype = {
|
||||||
}
|
}
|
||||||
} catch(ex) {
|
} catch(ex) {
|
||||||
// Not a valid URI.
|
// Not a valid URI.
|
||||||
|
|
||||||
|
// bug 1124536: fix getSourceText on scripts associated "javascript:SOURCE" urls
|
||||||
|
// (e.g. 'evaluate(sandbox, sourcecode, "javascript:"+sourcecode)' )
|
||||||
|
if (url.indexOf("javascript:") === 0) {
|
||||||
|
spec.contentType = "text/javascript";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -239,9 +239,12 @@ body {
|
||||||
background-position: center;
|
background-position: center;
|
||||||
background-size: 24px 24px;
|
background-size: 24px 24px;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
padding: 4px;
|
background-color: transparent;
|
||||||
height: 32px;
|
height: 40px;
|
||||||
width: 32px;
|
width: 40px;
|
||||||
|
border-top: 0;
|
||||||
|
border-left: 0;
|
||||||
|
border-right: 0;
|
||||||
border-bottom: 1px solid #c1c1c1;
|
border-bottom: 1px solid #c1c1c1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -265,7 +268,6 @@ body {
|
||||||
background-color: #FBFBFB;
|
background-color: #FBFBFB;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
cursor: pointer;
|
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
border: 1px solid #B5B5B5;
|
border: 1px solid #B5B5B5;
|
||||||
box-shadow: 0px 1px 12px #666;
|
box-shadow: 0px 1px 12px #666;
|
||||||
|
@ -376,7 +378,7 @@ body {
|
||||||
|
|
||||||
.close-button {
|
.close-button {
|
||||||
background-image: url("chrome://global/skin/reader/RM-Close-24x24.svg");
|
background-image: url("chrome://global/skin/reader/RM-Close-24x24.svg");
|
||||||
height: 60px;
|
height: 68px;
|
||||||
background-position: center 8px;
|
background-position: center 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче