зеркало из https://github.com/mozilla/gecko-dev.git
Backed out changeset 6636e1cd0c41 (bug 1529969) for causing node tests newtab failures. CLOSED TREE
This commit is contained in:
Родитель
35c54fbf80
Коммит
205ac58f1b
|
@ -1,79 +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/. */
|
|
||||||
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
function ContentSearchHandoffUIController() {
|
|
||||||
this._isPrivateWindow = false;
|
|
||||||
this._engineIcon = null;
|
|
||||||
|
|
||||||
window.addEventListener("ContentSearchService", this);
|
|
||||||
this._sendMsg("GetEngine");
|
|
||||||
}
|
|
||||||
|
|
||||||
ContentSearchHandoffUIController.prototype = {
|
|
||||||
handleEvent(event) {
|
|
||||||
let methodName = "_onMsg" + event.detail.type;
|
|
||||||
if (methodName in this) {
|
|
||||||
this[methodName](event.detail.data);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_onMsgEngine({ isPrivateWindow, engine }) {
|
|
||||||
this._isPrivateWindow = isPrivateWindow;
|
|
||||||
this._updateEngineIcon(engine);
|
|
||||||
},
|
|
||||||
|
|
||||||
_onMsgCurrentEngine(engine) {
|
|
||||||
if (!this._isPrivateWindow) {
|
|
||||||
this._updateEngineIcon(engine);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_onMsgCurrentPrivateEngine(engine) {
|
|
||||||
if (this._isPrivateWindow) {
|
|
||||||
this._updateEngineIcon(engine);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_updateEngineIcon(engine) {
|
|
||||||
if (this._engineIcon) {
|
|
||||||
URL.revokeObjectURL(this._engineIcon);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (engine.iconData) {
|
|
||||||
this._engineIcon = this._getFaviconURIFromIconData(engine.iconData);
|
|
||||||
} else {
|
|
||||||
this._engineIcon = "chrome://mozapps/skin/places/defaultFavicon.svg";
|
|
||||||
}
|
|
||||||
|
|
||||||
document.body.style.setProperty(
|
|
||||||
"--newtab-search-icon",
|
|
||||||
"url(" + this._engineIcon + ")"
|
|
||||||
);
|
|
||||||
},
|
|
||||||
|
|
||||||
// If the favicon is an array buffer, convert it into a Blob URI.
|
|
||||||
// Otherwise just return the plain URI.
|
|
||||||
_getFaviconURIFromIconData(data) {
|
|
||||||
if (typeof data === "string") {
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If typeof(data) != "string", we assume it's an ArrayBuffer
|
|
||||||
let blob = new Blob([data]);
|
|
||||||
return URL.createObjectURL(blob);
|
|
||||||
},
|
|
||||||
|
|
||||||
_sendMsg(type, data = null) {
|
|
||||||
dispatchEvent(
|
|
||||||
new CustomEvent("ContentSearchClient", {
|
|
||||||
detail: {
|
|
||||||
type,
|
|
||||||
data,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -94,7 +94,6 @@ browser.jar:
|
||||||
content/browser/sanitizeDialog.js (content/sanitizeDialog.js)
|
content/browser/sanitizeDialog.js (content/sanitizeDialog.js)
|
||||||
content/browser/sanitizeDialog.css (content/sanitizeDialog.css)
|
content/browser/sanitizeDialog.css (content/sanitizeDialog.css)
|
||||||
content/browser/contentSearchUI.js (content/contentSearchUI.js)
|
content/browser/contentSearchUI.js (content/contentSearchUI.js)
|
||||||
content/browser/contentSearchHandoffUI.js (content/contentSearchHandoffUI.js)
|
|
||||||
content/browser/contentSearchUI.css (content/contentSearchUI.css)
|
content/browser/contentSearchUI.css (content/contentSearchUI.css)
|
||||||
content/browser/tabbrowser.css (content/tabbrowser.css)
|
content/browser/tabbrowser.css (content/tabbrowser.css)
|
||||||
content/browser/tabbrowser.js (content/tabbrowser.js)
|
content/browser/tabbrowser.js (content/tabbrowser.js)
|
||||||
|
|
|
@ -28,7 +28,6 @@ function templateHTML(options) {
|
||||||
const debugString = options.debug ? "-dev" : "";
|
const debugString = options.debug ? "-dev" : "";
|
||||||
const scripts = [
|
const scripts = [
|
||||||
"chrome://browser/content/contentSearchUI.js",
|
"chrome://browser/content/contentSearchUI.js",
|
||||||
"chrome://browser/content/contentSearchHandoffUI.js",
|
|
||||||
"chrome://browser/content/contentTheme.js",
|
"chrome://browser/content/contentTheme.js",
|
||||||
`${options.baseUrl}vendor/react${debugString}.js`,
|
`${options.baseUrl}vendor/react${debugString}.js`,
|
||||||
`${options.baseUrl}vendor/react-dom${debugString}.js`,
|
`${options.baseUrl}vendor/react-dom${debugString}.js`,
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
* 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/. */
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
/* globals ContentSearchUIController, ContentSearchHandoffUIController */
|
/* globals ContentSearchUIController */
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
import { actionCreators as ac, actionTypes as at } from "common/Actions.jsm";
|
import { actionCreators as ac, actionTypes as at } from "common/Actions.jsm";
|
||||||
|
@ -18,7 +18,6 @@ export class _Search extends React.PureComponent {
|
||||||
this.onSearchHandoffPaste = this.onSearchHandoffPaste.bind(this);
|
this.onSearchHandoffPaste = this.onSearchHandoffPaste.bind(this);
|
||||||
this.onSearchHandoffDrop = this.onSearchHandoffDrop.bind(this);
|
this.onSearchHandoffDrop = this.onSearchHandoffDrop.bind(this);
|
||||||
this.onInputMount = this.onInputMount.bind(this);
|
this.onInputMount = this.onInputMount.bind(this);
|
||||||
this.onInputMountHandoff = this.onInputMountHandoff.bind(this);
|
|
||||||
this.onSearchHandoffButtonMount = this.onSearchHandoffButtonMount.bind(
|
this.onSearchHandoffButtonMount = this.onSearchHandoffButtonMount.bind(
|
||||||
this
|
this
|
||||||
);
|
);
|
||||||
|
@ -104,14 +103,6 @@ export class _Search extends React.PureComponent {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onInputMountHandoff(input) {
|
|
||||||
if (input) {
|
|
||||||
// The handoff UI controller helps usset the search icon and reacts to
|
|
||||||
// changes to default engine to keep everything in sync.
|
|
||||||
this._handoffSearchController = new ContentSearchHandoffUIController();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
onSearchHandoffButtonMount(button) {
|
onSearchHandoffButtonMount(button) {
|
||||||
// Keep a reference to the button for use during "paste" event handling.
|
// Keep a reference to the button for use during "paste" event handling.
|
||||||
this._searchHandoffButton = button;
|
this._searchHandoffButton = button;
|
||||||
|
@ -176,10 +167,18 @@ export class _Search extends React.PureComponent {
|
||||||
aria-hidden="true"
|
aria-hidden="true"
|
||||||
onDrop={this.onSearchHandoffDrop}
|
onDrop={this.onSearchHandoffDrop}
|
||||||
onPaste={this.onSearchHandoffPaste}
|
onPaste={this.onSearchHandoffPaste}
|
||||||
ref={this.onInputMountHandoff}
|
|
||||||
/>
|
/>
|
||||||
<div className="fake-caret" />
|
<div className="fake-caret" />
|
||||||
</button>
|
</button>
|
||||||
|
{/*
|
||||||
|
This dummy and hidden input below is so we can load ContentSearchUIController.
|
||||||
|
Why? It sets --newtab-search-icon for us and it isn't trivial to port over.
|
||||||
|
*/}
|
||||||
|
<input
|
||||||
|
type="search"
|
||||||
|
style={{ display: "none" }}
|
||||||
|
ref={this.onInputMount}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -10286,7 +10286,7 @@ __webpack_require__.r(__webpack_exports__);
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
* 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/. */
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
/* globals ContentSearchUIController, ContentSearchHandoffUIController */
|
/* globals ContentSearchUIController */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -10301,7 +10301,6 @@ class _Search extends react__WEBPACK_IMPORTED_MODULE_3___default.a.PureComponent
|
||||||
this.onSearchHandoffPaste = this.onSearchHandoffPaste.bind(this);
|
this.onSearchHandoffPaste = this.onSearchHandoffPaste.bind(this);
|
||||||
this.onSearchHandoffDrop = this.onSearchHandoffDrop.bind(this);
|
this.onSearchHandoffDrop = this.onSearchHandoffDrop.bind(this);
|
||||||
this.onInputMount = this.onInputMount.bind(this);
|
this.onInputMount = this.onInputMount.bind(this);
|
||||||
this.onInputMountHandoff = this.onInputMountHandoff.bind(this);
|
|
||||||
this.onSearchHandoffButtonMount = this.onSearchHandoffButtonMount.bind(this);
|
this.onSearchHandoffButtonMount = this.onSearchHandoffButtonMount.bind(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10391,14 +10390,6 @@ class _Search extends react__WEBPACK_IMPORTED_MODULE_3___default.a.PureComponent
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onInputMountHandoff(input) {
|
|
||||||
if (input) {
|
|
||||||
// The handoff UI controller helps usset the search icon and reacts to
|
|
||||||
// changes to default engine to keep everything in sync.
|
|
||||||
this._handoffSearchController = new ContentSearchHandoffUIController();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
onSearchHandoffButtonMount(button) {
|
onSearchHandoffButtonMount(button) {
|
||||||
// Keep a reference to the button for use during "paste" event handling.
|
// Keep a reference to the button for use during "paste" event handling.
|
||||||
this._searchHandoffButton = button;
|
this._searchHandoffButton = button;
|
||||||
|
@ -10450,11 +10441,16 @@ class _Search extends react__WEBPACK_IMPORTED_MODULE_3___default.a.PureComponent
|
||||||
tabIndex: "-1",
|
tabIndex: "-1",
|
||||||
"aria-hidden": "true",
|
"aria-hidden": "true",
|
||||||
onDrop: this.onSearchHandoffDrop,
|
onDrop: this.onSearchHandoffDrop,
|
||||||
onPaste: this.onSearchHandoffPaste,
|
onPaste: this.onSearchHandoffPaste
|
||||||
ref: this.onInputMountHandoff
|
|
||||||
}), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", {
|
}), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", {
|
||||||
className: "fake-caret"
|
className: "fake-caret"
|
||||||
}))));
|
})), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("input", {
|
||||||
|
type: "search",
|
||||||
|
style: {
|
||||||
|
display: "none"
|
||||||
|
},
|
||||||
|
ref: this.onInputMount
|
||||||
|
})));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,6 @@
|
||||||
<div id="root"></div>
|
<div id="root"></div>
|
||||||
<div id="footer-asrouter-container" role="presentation"></div>
|
<div id="footer-asrouter-container" role="presentation"></div>
|
||||||
<script src="chrome://browser/content/contentSearchUI.js"></script>
|
<script src="chrome://browser/content/contentSearchUI.js"></script>
|
||||||
<script src="chrome://browser/content/contentSearchHandoffUI.js"></script>
|
|
||||||
<script src="chrome://browser/content/contentTheme.js"></script>
|
<script src="chrome://browser/content/contentTheme.js"></script>
|
||||||
<script src="resource://activity-stream/vendor/react-dev.js"></script>
|
<script src="resource://activity-stream/vendor/react-dev.js"></script>
|
||||||
<script src="resource://activity-stream/vendor/react-dom-dev.js"></script>
|
<script src="resource://activity-stream/vendor/react-dom-dev.js"></script>
|
||||||
|
|
|
@ -20,7 +20,6 @@
|
||||||
<div id="root"></div>
|
<div id="root"></div>
|
||||||
<div id="footer-asrouter-container" role="presentation"></div>
|
<div id="footer-asrouter-container" role="presentation"></div>
|
||||||
<script src="chrome://browser/content/contentSearchUI.js"></script>
|
<script src="chrome://browser/content/contentSearchUI.js"></script>
|
||||||
<script src="chrome://browser/content/contentSearchHandoffUI.js"></script>
|
|
||||||
<script src="chrome://browser/content/contentTheme.js"></script>
|
<script src="chrome://browser/content/contentTheme.js"></script>
|
||||||
<script src="resource://activity-stream/vendor/react.js"></script>
|
<script src="resource://activity-stream/vendor/react.js"></script>
|
||||||
<script src="resource://activity-stream/vendor/react-dom.js"></script>
|
<script src="resource://activity-stream/vendor/react-dom.js"></script>
|
||||||
|
|
|
@ -118,5 +118,14 @@ document.addEventListener("DOMContentLoaded", function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
// Load contentSearchUI so it sets the search engine icon for us.
|
// Load contentSearchUI so it sets the search engine icon for us.
|
||||||
new window.ContentSearchHandoffUIController();
|
// TODO: FIXME. We should eventually refector contentSearchUI to do only what
|
||||||
|
// we need and have it do the common search handoff work for
|
||||||
|
// about:newtab and about:privatebrowsing.
|
||||||
|
let input = document.getElementById("dummy-input");
|
||||||
|
new window.ContentSearchUIController(
|
||||||
|
input,
|
||||||
|
input.parentNode,
|
||||||
|
"aboutprivatebrowsing",
|
||||||
|
"aboutprivatebrowsing"
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
<link rel="localization" href="branding/brand.ftl"/>
|
<link rel="localization" href="branding/brand.ftl"/>
|
||||||
<link rel="localization" href="browser/aboutPrivateBrowsing.ftl"/>
|
<link rel="localization" href="browser/aboutPrivateBrowsing.ftl"/>
|
||||||
<script src="chrome://browser/content/aboutPrivateBrowsing.js"></script>
|
<script src="chrome://browser/content/aboutPrivateBrowsing.js"></script>
|
||||||
<script src="chrome://browser/content/contentSearchHandoffUI.js"></script>
|
<script src="chrome://browser/content/contentSearchUI.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
@ -50,6 +50,7 @@
|
||||||
<input id="fake-editable" class="fake-editable" tabindex="-1" aria-hidden="true" />
|
<input id="fake-editable" class="fake-editable" tabindex="-1" aria-hidden="true" />
|
||||||
<div class="fake-caret" />
|
<div class="fake-caret" />
|
||||||
</button>
|
</button>
|
||||||
|
<input id="dummy-input" class="dummy-input" type="search" />
|
||||||
</div>
|
</div>
|
||||||
<div class="info">
|
<div class="info">
|
||||||
<h1 data-l10n-id="about-private-browsing-info-title"></h1>
|
<h1 data-l10n-id="about-private-browsing-info-title"></h1>
|
||||||
|
|
|
@ -453,17 +453,6 @@ var ContentSearch = {
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
_onMessageGetEngine(msg, data) {
|
|
||||||
return this.currentStateObj(msg.target.ownerGlobal).then(state => {
|
|
||||||
this._reply(msg, "Engine", {
|
|
||||||
isPrivateWindow: state.isPrivateWindow,
|
|
||||||
engine: state.isPrivateWindow
|
|
||||||
? state.currentPrivateEngine
|
|
||||||
: state.currentEngine,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
_onMessageGetStrings(msg, data) {
|
_onMessageGetStrings(msg, data) {
|
||||||
this._reply(msg, "Strings", this.searchSuggestionUIStrings);
|
this._reply(msg, "Strings", this.searchSuggestionUIStrings);
|
||||||
},
|
},
|
||||||
|
|
|
@ -163,6 +163,10 @@ p {
|
||||||
width: 1px;
|
width: 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.dummy-input {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
.search-banner {
|
.search-banner {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
background-color: var(--in-content-banner-background);
|
background-color: var(--in-content-banner-background);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче