diff --git a/chrome/browser/resources/settings/about_page/about_page.html b/chrome/browser/resources/settings/about_page/about_page.html index 06d1ec1..6d9ee18 100644 --- a/chrome/browser/resources/settings/about_page/about_page.html +++ b/chrome/browser/resources/settings/about_page/about_page.html
@@ -19,6 +19,7 @@ <if expr="chromeos"> <link rel="import" href="detailed_build_info.html"> +<link rel="import" href="update_warning_dialog.html"> <link rel="import" href="../settings_page/settings_subpage.html"> </if> @@ -222,6 +223,13 @@ </settings-animated-pages> </settings-section> </div> +<if expr="chromeos"> + <template is="dom-if" if="[[showUpdateWarningDialog_]]" restamp> + <settings-update-warning-dialog update-info="[[updateInfo_]]" + on-close="onUpdateWarningDialogClose_"> + </settings-update-warning-dialog> + </template> +</if> </template> <script src="about_page.js"></script> </dom-module>
diff --git a/chrome/browser/resources/settings/about_page/about_page.js b/chrome/browser/resources/settings/about_page/about_page.js index 2e5464e..54ca31e 100644 --- a/chrome/browser/resources/settings/about_page/about_page.js +++ b/chrome/browser/resources/settings/about_page/about_page.js
@@ -6,6 +6,7 @@ * @fileoverview 'settings-about-page' contains version and OS related * information. */ + Polymer({ is: 'settings-about-page', @@ -84,7 +85,16 @@ '#detailed-build-info-trigger'); return map; }, - } + }, + + /** @private */ + showUpdateWarningDialog_: { + type: Boolean, + value: false, + }, + + /** @private {!AboutPageUpdateInfo|undefined} */ + updateInfo_: Object, // </if> }, @@ -163,6 +173,10 @@ // <if expr="chromeos"> if (event.status == UpdateStatus.CHECKING) this.hasCheckedForUpdates_ = true; + else if (event.status == UpdateStatus.NEED_PERMISSION_TO_UPDATE) { + this.showUpdateWarningDialog_ = true; + this.updateInfo_ = {version: event.version, size: event.size}; + } // </if> this.currentUpdateStatusEvent_ = event; }, @@ -258,6 +272,13 @@ switch (this.currentUpdateStatusEvent_.status) { case UpdateStatus.CHECKING: return this.i18n('aboutUpgradeCheckStarted'); + case UpdateStatus.NEED_PERMISSION_TO_UPDATE: + // This status is immediately followed by an reporting error status. + // When update engine reports error, UI just shows that your device is + // up to date. This is a bug that needs to be fixed in the future. + // TODO(weidongg/581071): Show proper message when update engine aborts + // due to cellular connection. + return ''; case UpdateStatus.NEARLY_UPDATED: // <if expr="chromeos"> if (this.currentChannel_ != this.targetChannel_) @@ -399,7 +420,8 @@ var staleUpdatedStatus = !this.hasCheckedForUpdates_ && this.checkStatus_(UpdateStatus.UPDATED); - return staleUpdatedStatus || this.checkStatus_(UpdateStatus.FAILED); + return staleUpdatedStatus || this.checkStatus_(UpdateStatus.FAILED) || + this.checkStatus_(UpdateStatus.NEED_PERMISSION_TO_UPDATE); }, /** @@ -409,6 +431,11 @@ shouldShowRegulatoryInfo_: function() { return this.regulatoryInfo_ !== null; }, + + /** @private */ + onUpdateWarningDialogClose_: function() { + this.showUpdateWarningDialog_ = false; + }, // </if> /** @private */
diff --git a/chrome/browser/resources/settings/about_page/about_page_browser_proxy.js b/chrome/browser/resources/settings/about_page/about_page_browser_proxy.js index 2b592ac..892ceca5 100644 --- a/chrome/browser/resources/settings/about_page/about_page_browser_proxy.js +++ b/chrome/browser/resources/settings/about_page/about_page_browser_proxy.js
@@ -35,6 +35,14 @@ var VersionInfo; /** + * @typedef {{ + * version: (string|undefined), + * size: (string|undefined), + * }} + */ +var AboutPageUpdateInfo; + +/** * Enumeration of all possible browser channels. * @enum {string} */ @@ -58,6 +66,7 @@ FAILED: 'failed', DISABLED: 'disabled', DISABLED_BY_ADMIN: 'disabled_by_admin', + NEED_PERMISSION_TO_UPDATE: 'need_permission_to_update', }; // <if expr="_google_chrome and is_macosx"> @@ -78,6 +87,8 @@ * progress: (number|undefined), * message: (string|undefined), * connectionTypes: (string|undefined), + * version: (string|undefined), + * size: (string|undefined), * }} */ var UpdateStatusChangedEvent; @@ -147,6 +158,18 @@ requestUpdate: function() {}, /** + * Checks for the update with specified version and size and applies over + * cellular. The target version and size are the same as were received from + * 'update-status-changed' WebUI event. We send this back all the way to + * update engine for it to double check with update server in case there's a + * new update available. This prevents downloading the new update that user + * didn't agree to. + * @param {string} target_version + * @param {string} target_size + */ + requestUpdateOverCellular: function(target_version, target_size) {}, + + /** * @param {!BrowserChannel} channel * @param {boolean} isPowerwashAllowed */ @@ -214,6 +237,11 @@ }, /** @override */ + requestUpdateOverCellular: function(target_version, target_size) { + chrome.send('requestUpdateOverCellular', [target_version, target_size]); + }, + + /** @override */ setChannel: function(channel, isPowerwashAllowed) { chrome.send('setChannel', [channel, isPowerwashAllowed]); },
diff --git a/chrome/browser/resources/settings/about_page/update_warning_dialog.js b/chrome/browser/resources/settings/about_page/update_warning_dialog.js index 1060fa4f..d938891 100644 --- a/chrome/browser/resources/settings/about_page/update_warning_dialog.js +++ b/chrome/browser/resources/settings/about_page/update_warning_dialog.js
@@ -12,6 +12,17 @@ behaviors: [I18nBehavior], + properties: { + /** @type {!AboutPageUpdateInfo|undefined} */ + updateInfo: { + type: Object, + observer: 'updateInfoChanged_', + }, + }, + + /** @private {?settings.AboutPageBrowserProxy} */ + browserProxy_: null, + /** @override */ ready: function() { this.browserProxy_ = settings.AboutPageBrowserProxyImpl.getInstance(); @@ -24,22 +35,21 @@ /** @private */ onCancelTap_: function() { - // TODO(weidongg): implement the real behaviors here. this.$.dialog.close(); }, /** @private */ onContinueTap_: function() { - // TODO(weidongg): implement the real behaviors here. + this.browserProxy_.requestUpdateOverCellular(this.updateInfo.version, + this.updateInfo.size); this.$.dialog.close(); }, - /** - * @param {string} updateSizeMb Size of the update in megabytes. - * @private - */ - setUpdateWarningMessage: function(updateSizeMb) { - this.$$("#update-warning-message").innerHTML = - this.i18n("aboutUpdateWarningMessage", updateSizeMb); + /** @private */ + updateInfoChanged_: function() { + this.$$("#update-warning-message").innerHTML = + this.i18n("aboutUpdateWarningMessage", + // Convert bytes to megabytes + Math.floor(Number(this.updateInfo.size) / (1024 * 1024))); }, });
diff --git a/chrome/browser/ui/webui/help/help_handler.cc b/chrome/browser/ui/webui/help/help_handler.cc index cb2cc35..d0a18970 100644 --- a/chrome/browser/ui/webui/help/help_handler.cc +++ b/chrome/browser/ui/webui/help/help_handler.cc
@@ -602,7 +602,10 @@ } void HelpHandler::SetUpdateStatus(VersionUpdater::Status status, - int progress, const base::string16& message) { + int progress, + const std::string& /* version */, + int64_t /* size */, + const base::string16& message) { // Only UPDATING state should have progress set. DCHECK(status == VersionUpdater::UPDATING || progress == 0); @@ -623,6 +626,9 @@ case VersionUpdater::FAILED: case VersionUpdater::FAILED_OFFLINE: case VersionUpdater::FAILED_CONNECTION_TYPE_DISALLOWED: + // Old help page does not support update over cellular connection. Treat this + // signal as FAILED. + case VersionUpdater::NEED_PERMISSION_TO_UPDATE: status_str = "failed"; break; case VersionUpdater::DISABLED:
diff --git a/chrome/browser/ui/webui/help/help_handler.h b/chrome/browser/ui/webui/help/help_handler.h index e0ba5fa0..82b088b 100644 --- a/chrome/browser/ui/webui/help/help_handler.h +++ b/chrome/browser/ui/webui/help/help_handler.h
@@ -90,6 +90,8 @@ // Callback method which forwards status updates to the page. void SetUpdateStatus(VersionUpdater::Status status, int progress, + const std::string& version, + int64_t size, const base::string16& fail_message); #if defined(OS_MACOSX)
diff --git a/chrome/browser/ui/webui/help/version_updater.h b/chrome/browser/ui/webui/help/version_updater.h index f12e367..d36b26f 100644 --- a/chrome/browser/ui/webui/help/version_updater.h +++ b/chrome/browser/ui/webui/help/version_updater.h
@@ -25,6 +25,7 @@ // Update process state machine. enum Status { CHECKING, + NEED_PERMISSION_TO_UPDATE, UPDATING, NEARLY_UPDATED, UPDATED, @@ -53,8 +54,13 @@ // Used to update the client of status changes. int parameter is the progress // and should only be non-zero for the UPDATING state. + // std::string parameter is the version of the available update and should be + // empty string when update is not available. + // int64_t parameter is the size in bytes of the available update and should + // be 0 when update is not available. // base::string16 parameter is a message explaining a failure. - typedef base::Callback<void(Status, int, const base::string16&)> + typedef base::Callback< + void(Status, int, const std::string&, int64_t, const base::string16&)> StatusCallback; // Used to show or hide the promote UI elements. Mac-only. @@ -86,6 +92,14 @@ virtual void GetChannel(bool get_current_channel, const ChannelCallback& callback) = 0; virtual void GetEolStatus(const EolStatusCallback& callback) = 0; + + // Set the update over cellular target in |target_version| and |target_size| + // arguments maintained by update engine. The arguments are later used by + // update engine to match the given target with the server head and to allow + // update over cellular to this given target. + virtual void SetUpdateOverCellularTarget(const StatusCallback& callback, + const std::string& target_version, + int64_t target_size) = 0; #endif };
diff --git a/chrome/browser/ui/webui/help/version_updater_basic.cc b/chrome/browser/ui/webui/help/version_updater_basic.cc index 2cd9126..8cb85a3 100644 --- a/chrome/browser/ui/webui/help/version_updater_basic.cc +++ b/chrome/browser/ui/webui/help/version_updater_basic.cc
@@ -11,9 +11,9 @@ const StatusCallback& status_callback, const PromoteCallback&) { if (UpgradeDetector::GetInstance()->notify_upgrade()) - status_callback.Run(NEARLY_UPDATED, 0, base::string16()); + status_callback.Run(NEARLY_UPDATED, 0, std::string(), 0, base::string16()); else - status_callback.Run(DISABLED, 0, base::string16()); + status_callback.Run(DISABLED, 0, std::string(), 0, base::string16()); } VersionUpdater* VersionUpdater::Create(content::WebContents* web_contents) {
diff --git a/chrome/browser/ui/webui/help/version_updater_chromeos.cc b/chrome/browser/ui/webui/help/version_updater_chromeos.cc index e74b938..00d657b 100644 --- a/chrome/browser/ui/webui/help/version_updater_chromeos.cc +++ b/chrome/browser/ui/webui/help/version_updater_chromeos.cc
@@ -8,6 +8,7 @@ #include "base/bind.h" #include "base/bind_helpers.h" +#include "base/strings/string_number_conversions.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/chromeos/login/startup_utils.h" #include "chrome/browser/chromeos/login/wizard_controller.h" @@ -49,15 +50,13 @@ NetworkStatus GetNetworkStatus(const chromeos::NetworkState* network) { if (!network || !network->IsConnectedState()) // Offline state. return NETWORK_STATUS_OFFLINE; - // The connection type checking strategy must be the same as the one // used in update engine. if (network->type() == shill::kTypeBluetooth) return NETWORK_STATUS_DISALLOWED; - if (network->type() == shill::kTypeCellular && - !help_utils_chromeos::IsUpdateOverCellularAllowed()) { - return NETWORK_STATUS_DISALLOWED; - } + // Allow updates over cellular by default in chrome, as update engine still + // needs to check device policy and user preferences when checking for + // updates to decide whether to proceed to downloading. return NETWORK_STATUS_ALLOWED; } @@ -78,7 +77,7 @@ // the appropriate status. bool EnsureCanUpdate(const VersionUpdater::StatusCallback& callback) { if (IsAutoUpdateDisabled()) { - callback.Run(VersionUpdater::DISABLED_BY_ADMIN, 0, + callback.Run(VersionUpdater::DISABLED_BY_ADMIN, 0, std::string(), 0, l10n_util::GetStringUTF16(IDS_UPGRADE_DISABLED_BY_POLICY)); return false; } @@ -92,15 +91,16 @@ // to a network for which updates are disallowed. NetworkStatus status = GetNetworkStatus(network); if (status == NETWORK_STATUS_OFFLINE) { - callback.Run(VersionUpdater::FAILED_OFFLINE, 0, - l10n_util::GetStringUTF16(IDS_UPGRADE_OFFLINE)); + callback.Run(VersionUpdater::FAILED_OFFLINE, 0, std::string(), 0, + l10n_util::GetStringUTF16(IDS_UPGRADE_OFFLINE)); return false; } else if (status == NETWORK_STATUS_DISALLOWED) { base::string16 message = l10n_util::GetStringFUTF16( IDS_UPGRADE_DISALLOWED, help_utils_chromeos::GetConnectionTypeAsUTF16(network->type())); - callback.Run(VersionUpdater::FAILED_CONNECTION_TYPE_DISALLOWED, 0, message); + callback.Run(VersionUpdater::FAILED_CONNECTION_TYPE_DISALLOWED, 0, + std::string(), 0, message); return false; } @@ -169,6 +169,32 @@ SetChannel(channel, is_powerwash_allowed); } +void VersionUpdaterCros::SetUpdateOverCellularTarget( + const StatusCallback& callback, + const std::string& target_version, + int64_t target_size) { + callback_ = callback; + DBusThreadManager::Get() + ->GetUpdateEngineClient() + ->SetUpdateOverCellularTarget( + target_version, target_size, + base::Bind(&VersionUpdaterCros::OnSetUpdateOverCellularTarget, + weak_ptr_factory_.GetWeakPtr())); +} + +void VersionUpdaterCros::OnSetUpdateOverCellularTarget(bool success) { + if (success) { + // Target is set successfully, so we can proceed to update. + CheckForUpdate(callback_, VersionUpdater::PromoteCallback()); + } else { + // TODO(weidongg/691108): invoke callback to signal about page to show + // appropriate error message. + LOG(ERROR) << "Error setting update over cellular target."; + callback_.Run(VersionUpdater::FAILED, 0, std::string(), 0, + base::string16()); + } +} + void VersionUpdaterCros::GetChannel(bool get_current_channel, const ChannelCallback& cb) { UpdateEngineClient* update_engine_client = @@ -218,6 +244,8 @@ const UpdateEngineClient::Status& status) { Status my_status = UPDATED; int progress = 0; + std::string version = status.new_version; + int64_t size = status.new_size; base::string16 message; // If the updater is currently idle, just show the last operation (unless it @@ -248,6 +276,9 @@ case UpdateEngineClient::UPDATE_STATUS_UPDATE_AVAILABLE: my_status = UPDATING; break; + case UpdateEngineClient::UPDATE_STATUS_NEED_PERMISSION_TO_UPDATE: + my_status = NEED_PERMISSION_TO_UPDATE; + break; case UpdateEngineClient::UPDATE_STATUS_VERIFYING: case UpdateEngineClient::UPDATE_STATUS_FINALIZING: // Once the download is finished, keep the progress at 100; it shouldn't @@ -262,7 +293,7 @@ break; } - callback_.Run(my_status, progress, message); + callback_.Run(my_status, progress, version, size, message); last_operation_ = status.status; if (check_for_update_when_idle_ && @@ -276,5 +307,5 @@ // If version updating is not implemented, this binary is the most up-to-date // possible with respect to automatic updating. if (result == UpdateEngineClient::UPDATE_RESULT_NOTIMPLEMENTED) - callback_.Run(UPDATED, 0, base::string16()); + callback_.Run(UPDATED, 0, std::string(), 0, base::string16()); }
diff --git a/chrome/browser/ui/webui/help/version_updater_chromeos.h b/chrome/browser/ui/webui/help/version_updater_chromeos.h index b9f50dd..b6de0cb 100644 --- a/chrome/browser/ui/webui/help/version_updater_chromeos.h +++ b/chrome/browser/ui/webui/help/version_updater_chromeos.h
@@ -26,6 +26,9 @@ bool is_powerwash_allowed) override; void GetChannel(bool get_current_channel, const ChannelCallback& callback) override; + void SetUpdateOverCellularTarget(const StatusCallback& callback, + const std::string& target_version, + int64_t target_size) override; // Gets the last update status, without triggering a new check or download. void GetUpdateStatus(const StatusCallback& callback); @@ -47,6 +50,9 @@ // Callback from UpdateEngineClient::RequestUpdateCheck(). void OnUpdateCheck(chromeos::UpdateEngineClient::UpdateCheckResult result); + // Callback from UpdateEngineClient::SetUpdateOverCellularTarget(). + void OnSetUpdateOverCellularTarget(bool success); + // Callback from UpdateEngineClient::GetChannel(). void OnGetChannel(const ChannelCallback& cb, const std::string& current_channel);
diff --git a/chrome/browser/ui/webui/help/version_updater_chromeos_unittest.cc b/chrome/browser/ui/webui/help/version_updater_chromeos_unittest.cc index d4aeb58..3db6e62 100644 --- a/chrome/browser/ui/webui/help/version_updater_chromeos_unittest.cc +++ b/chrome/browser/ui/webui/help/version_updater_chromeos_unittest.cc
@@ -32,8 +32,9 @@ void CheckNotification(VersionUpdater::Status /* status */, int /* progress */, - const base::string16& /* message */) { -} + const std::string& /* version */, + int64_t /* size */, + const base::string16& /* message */) {} } // namespace
diff --git a/chrome/browser/ui/webui/help/version_updater_mac.mm b/chrome/browser/ui/webui/help/version_updater_mac.mm index 2347f3fa..c7f0393 100644 --- a/chrome/browser/ui/webui/help/version_updater_mac.mm +++ b/chrome/browser/ui/webui/help/version_updater_mac.mm
@@ -108,7 +108,7 @@ } else { // There is no glue, or the application is on a read-only filesystem. // Updates and promotions are impossible. - status_callback_.Run(DISABLED, 0, base::string16()); + status_callback_.Run(DISABLED, 0, std::string(), 0, base::string16()); } } @@ -235,7 +235,7 @@ } if (!status_callback_.is_null()) - status_callback_.Run(status, 0, message); + status_callback_.Run(status, 0, std::string(), 0, message); PromotionState promotion_state; if (!promote_callback_.is_null()) {
diff --git a/chrome/browser/ui/webui/help/version_updater_win.cc b/chrome/browser/ui/webui/help/version_updater_win.cc index e3d948a50..43bcd59 100644 --- a/chrome/browser/ui/webui/help/version_updater_win.cc +++ b/chrome/browser/ui/webui/help/version_updater_win.cc
@@ -39,7 +39,7 @@ if (!(base::win::GetVersion() == base::win::VERSION_VISTA && (base::win::OSInfo::GetInstance()->service_pack().major == 0) && !base::win::UserAccountControlIsEnabled())) { - callback_.Run(CHECKING, 0, base::string16()); + callback_.Run(CHECKING, 0, std::string(), 0, base::string16()); BeginUpdateCheckOnFileThread(false /* !install_update_if_possible */); } } @@ -69,18 +69,18 @@ status = UPDATING; BeginUpdateCheckOnFileThread(true /* install_update_if_possible */); } - callback_.Run(status, 0, base::string16()); + callback_.Run(status, 0, std::string(), 0, base::string16()); } void VersionUpdaterWin::OnUpgradeProgress(int progress, const base::string16& new_version) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - callback_.Run(UPDATING, progress, base::string16()); + callback_.Run(UPDATING, progress, std::string(), 0, base::string16()); } void VersionUpdaterWin::OnUpgradeComplete(const base::string16& new_version) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - callback_.Run(NEARLY_UPDATED, 0, base::string16()); + callback_.Run(NEARLY_UPDATED, 0, std::string(), 0, base::string16()); } void VersionUpdaterWin::OnError(GoogleUpdateErrorCode error_code, @@ -111,7 +111,7 @@ } break; } - callback_.Run(status, 0, message); + callback_.Run(status, 0, std::string(), 0, message); } void VersionUpdaterWin::BeginUpdateCheckOnFileThread( @@ -127,7 +127,7 @@ void VersionUpdaterWin::OnPendingRestartCheck(bool is_update_pending_restart) { callback_.Run(is_update_pending_restart ? NEARLY_UPDATED : UPDATED, 0, - base::string16()); + std::string(), 0, base::string16()); } VersionUpdater* VersionUpdater::Create(content::WebContents* web_contents) {
diff --git a/chrome/browser/ui/webui/settings/about_handler.cc b/chrome/browser/ui/webui/settings/about_handler.cc index 660d07d..2ee8ce7b 100644 --- a/chrome/browser/ui/webui/settings/about_handler.cc +++ b/chrome/browser/ui/webui/settings/about_handler.cc
@@ -19,6 +19,7 @@ #include "base/macros.h" #include "base/memory/ptr_util.h" #include "base/strings/string16.h" +#include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "base/task_scheduler/post_task.h" @@ -239,6 +240,9 @@ case VersionUpdater::DISABLED_BY_ADMIN: status_str = "disabled_by_admin"; break; + case VersionUpdater::NEED_PERMISSION_TO_UPDATE: + status_str = "need_permission_to_update"; + break; } return status_str; @@ -340,7 +344,10 @@ web_ui()->RegisterMessageCallback( "requestUpdate", base::Bind(&AboutHandler::HandleRequestUpdate, base::Unretained(this))); - + web_ui()->RegisterMessageCallback( + "requestUpdateOverCellular", + base::Bind(&AboutHandler::HandleRequestUpdateOverCellular, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "getVersionInfo", base::Bind(&AboutHandler::HandleGetVersionInfo, base::Unretained(this))); @@ -544,6 +551,28 @@ RequestUpdate(); } +void AboutHandler::HandleRequestUpdateOverCellular( + const base::ListValue* args) { + CHECK_EQ(2U, args->GetSize()); + + std::string target_version; + std::string target_size_string; + int64_t target_size; + + CHECK(args->GetString(0, &target_version)); + CHECK(args->GetString(1, &target_size_string)); + CHECK(base::StringToInt64(target_size_string, &target_size)); + + RequestUpdateOverCellular(target_version, target_size); +} + +void AboutHandler::RequestUpdateOverCellular(const std::string& target_version, + int64_t target_size) { + version_updater_->SetUpdateOverCellularTarget( + base::Bind(&AboutHandler::SetUpdateStatus, base::Unretained(this)), + target_version, target_size); +} + #endif // defined(OS_CHROMEOS) void AboutHandler::RequestUpdate() { @@ -558,6 +587,8 @@ void AboutHandler::SetUpdateStatus(VersionUpdater::Status status, int progress, + const std::string& version, + int64_t size, const base::string16& message) { // Only UPDATING state should have progress set. DCHECK(status == VersionUpdater::UPDATING || progress == 0); @@ -566,7 +597,9 @@ event->SetString("status", UpdateStatusToString(status)); event->SetString("message", message); event->SetInteger("progress", progress); - + event->SetString("version", version); + // DictionaryValue does not support int64_t, so convert to string. + event->SetString("size", base::Int64ToString(size)); #if defined(OS_CHROMEOS) if (status == VersionUpdater::FAILED_OFFLINE || status == VersionUpdater::FAILED_CONNECTION_TYPE_DISALLOWED) {
diff --git a/chrome/browser/ui/webui/settings/about_handler.h b/chrome/browser/ui/webui/settings/about_handler.h index 3de70b6..5dc9d23 100644 --- a/chrome/browser/ui/webui/settings/about_handler.h +++ b/chrome/browser/ui/webui/settings/about_handler.h
@@ -109,6 +109,14 @@ // Checks for and applies update, triggered by JS. void HandleRequestUpdate(const base::ListValue* args); + // Checks for and applies update over cellular connection, triggered by JS. + // Target version and size should be included in the list of arguments. + void HandleRequestUpdateOverCellular(const base::ListValue* args); + + // Checks for and applies update over cellular connection to the given target. + void RequestUpdateOverCellular(const std::string& target_version, + int64_t target_size); + #endif // Checks for and applies update. @@ -117,6 +125,8 @@ // Callback method which forwards status updates to the page. void SetUpdateStatus(VersionUpdater::Status status, int progress, + const std::string& version, + int64_t size, const base::string16& fail_message); #if defined(OS_MACOSX)
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-getElementsByTagName-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-getElementsByTagName-expected.txt index 91ac357..59d64579 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-getElementsByTagName-expected.txt +++ b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-getElementsByTagName-expected.txt
@@ -12,12 +12,12 @@ PASS HTML element with uppercase tagName never matches in HTML Documents PASS Element in non-HTML namespace, no prefix, lowercase name PASS Element in non-HTML namespace, no prefix, uppercase name -FAIL Element in non-HTML namespace, prefix, lowercase name assert_array_equals: lengths differ, expected 0 got 1 -FAIL Element in non-HTML namespace, prefix, uppercase name assert_array_equals: lengths differ, expected 0 got 1 +PASS Element in non-HTML namespace, prefix, lowercase name +PASS Element in non-HTML namespace, prefix, uppercase name PASS Element in HTML namespace, no prefix, non-ascii characters in name PASS Element in non-HTML namespace, non-ascii characters in name -FAIL Element in HTML namespace, prefix, non-ascii characters in name assert_array_equals: All uppercase input lengths differ, expected 1 got 0 -FAIL Element in non-HTML namespace, prefix, non-ascii characters in name assert_array_equals: All uppercase input lengths differ, expected 1 got 0 +PASS Element in HTML namespace, prefix, non-ascii characters in name +PASS Element in non-HTML namespace, prefix, non-ascii characters in name PASS getElementsByTagName('*') Harness: the test ran to completion.
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-getElementsByTagName-xhtml-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-getElementsByTagName-xhtml-expected.txt deleted file mode 100644 index 9d62c817..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-getElementsByTagName-xhtml-expected.txt +++ /dev/null
@@ -1,13 +0,0 @@ -This is a testharness.js-based test. -PASS HTML element with uppercase tag name matches in XHTML documents -PASS Element in non-HTML namespace, no prefix, lowercase name -PASS Element in non-HTML namespace, no prefix, uppercase name -FAIL Element in non-HTML namespace, prefix, lowercase name assert_array_equals: lengths differ, expected 0 got 1 -FAIL Element in non-HTML namespace, prefix, uppercase name assert_array_equals: lengths differ, expected 0 got 1 -PASS Element in HTML namespace, no prefix, non-ascii characters in name -PASS Element in non-HTML namespace, non-ascii characters in name -FAIL Element in HTML namespace, prefix, non-ascii characters in name assert_array_equals: Ascii lowercase input lengths differ, expected 1 got 0 -FAIL Element in non-HTML namespace, prefix, non-ascii characters in name assert_array_equals: All uppercase input lengths differ, expected 1 got 0 -PASS getElementsByTagName('*') -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-getElementsByTagName-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-getElementsByTagName-expected.txt index 868ebed9..efd83ed 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-getElementsByTagName-expected.txt +++ b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-getElementsByTagName-expected.txt
@@ -12,12 +12,12 @@ PASS HTML element with uppercase tagName never matches in HTML Documents PASS Element in non-HTML namespace, no prefix, lowercase name PASS Element in non-HTML namespace, no prefix, uppercase name -FAIL Element in non-HTML namespace, prefix, lowercase name assert_array_equals: lengths differ, expected 0 got 1 -FAIL Element in non-HTML namespace, prefix, uppercase name assert_array_equals: lengths differ, expected 0 got 1 +PASS Element in non-HTML namespace, prefix, lowercase name +PASS Element in non-HTML namespace, prefix, uppercase name PASS Element in HTML namespace, no prefix, non-ascii characters in name PASS Element in non-HTML namespace, non-ascii characters in name -FAIL Element in HTML namespace, prefix, non-ascii characters in name assert_array_equals: All uppercase input lengths differ, expected 1 got 0 -FAIL Element in non-HTML namespace, prefix, non-ascii characters in name assert_array_equals: All uppercase input lengths differ, expected 1 got 0 +PASS Element in HTML namespace, prefix, non-ascii characters in name +PASS Element in non-HTML namespace, prefix, non-ascii characters in name PASS getElementsByTagName('*') PASS Matching the context object Harness: the test ran to completion.
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/case-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/case-expected.txt deleted file mode 100644 index c4535c31..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/case-expected.txt +++ /dev/null
@@ -1,289 +0,0 @@ -This is a testharness.js-based test. -Found 285 tests; 280 PASS, 5 FAIL, 0 TIMEOUT, 0 NOTRUN. -PASS createElement abc -PASS setAttribute abc -PASS getAttribute abc -FAIL getElementsByTagName a:abc assert_array_equals: lengths differ, expected 0 got 3 -PASS getElementsByTagName abc -PASS createElement Abc -PASS setAttribute Abc -PASS getAttribute Abc -FAIL getElementsByTagName a:Abc assert_array_equals: lengths differ, expected 0 got 3 -PASS getElementsByTagName Abc -PASS createElement ABC -PASS setAttribute ABC -PASS getAttribute ABC -FAIL getElementsByTagName a:ABC assert_array_equals: lengths differ, expected 0 got 3 -PASS getElementsByTagName ABC -PASS createElement ä -PASS setAttribute ä -PASS getAttribute ä -FAIL getElementsByTagName a:ä assert_array_equals: lengths differ, expected 0 got 3 -PASS getElementsByTagName ä -PASS createElement Ä -PASS setAttribute Ä -PASS getAttribute Ä -FAIL getElementsByTagName a:Ä assert_array_equals: lengths differ, expected 0 got 3 -PASS getElementsByTagName Ä -PASS createElementNS http://www.w3.org/1999/xhtml,abc,abc -PASS setAttributeNS http://www.w3.org/1999/xhtml,abc,abc -PASS getAttributeNS http://www.w3.org/1999/xhtml,abc,abc -PASS createElementNS http://www.w3.org/1999/xhtml,abc,Abc -PASS setAttributeNS http://www.w3.org/1999/xhtml,abc,Abc -PASS getAttributeNS http://www.w3.org/1999/xhtml,abc,Abc -PASS createElementNS http://www.w3.org/1999/xhtml,abc,ABC -PASS setAttributeNS http://www.w3.org/1999/xhtml,abc,ABC -PASS getAttributeNS http://www.w3.org/1999/xhtml,abc,ABC -PASS createElementNS http://www.w3.org/1999/xhtml,abc,ä -PASS setAttributeNS http://www.w3.org/1999/xhtml,abc,ä -PASS getAttributeNS http://www.w3.org/1999/xhtml,abc,ä -PASS createElementNS http://www.w3.org/1999/xhtml,abc,Ä -PASS setAttributeNS http://www.w3.org/1999/xhtml,abc,Ä -PASS getAttributeNS http://www.w3.org/1999/xhtml,abc,Ä -PASS createElementNS http://www.w3.org/1999/xhtml,Abc,abc -PASS setAttributeNS http://www.w3.org/1999/xhtml,Abc,abc -PASS getAttributeNS http://www.w3.org/1999/xhtml,Abc,abc -PASS createElementNS http://www.w3.org/1999/xhtml,Abc,Abc -PASS setAttributeNS http://www.w3.org/1999/xhtml,Abc,Abc -PASS getAttributeNS http://www.w3.org/1999/xhtml,Abc,Abc -PASS createElementNS http://www.w3.org/1999/xhtml,Abc,ABC -PASS setAttributeNS http://www.w3.org/1999/xhtml,Abc,ABC -PASS getAttributeNS http://www.w3.org/1999/xhtml,Abc,ABC -PASS createElementNS http://www.w3.org/1999/xhtml,Abc,ä -PASS setAttributeNS http://www.w3.org/1999/xhtml,Abc,ä -PASS getAttributeNS http://www.w3.org/1999/xhtml,Abc,ä -PASS createElementNS http://www.w3.org/1999/xhtml,Abc,Ä -PASS setAttributeNS http://www.w3.org/1999/xhtml,Abc,Ä -PASS getAttributeNS http://www.w3.org/1999/xhtml,Abc,Ä -PASS createElementNS http://www.w3.org/1999/xhtml,ABC,abc -PASS setAttributeNS http://www.w3.org/1999/xhtml,ABC,abc -PASS getAttributeNS http://www.w3.org/1999/xhtml,ABC,abc -PASS createElementNS http://www.w3.org/1999/xhtml,ABC,Abc -PASS setAttributeNS http://www.w3.org/1999/xhtml,ABC,Abc -PASS getAttributeNS http://www.w3.org/1999/xhtml,ABC,Abc -PASS createElementNS http://www.w3.org/1999/xhtml,ABC,ABC -PASS setAttributeNS http://www.w3.org/1999/xhtml,ABC,ABC -PASS getAttributeNS http://www.w3.org/1999/xhtml,ABC,ABC -PASS createElementNS http://www.w3.org/1999/xhtml,ABC,ä -PASS setAttributeNS http://www.w3.org/1999/xhtml,ABC,ä -PASS getAttributeNS http://www.w3.org/1999/xhtml,ABC,ä -PASS createElementNS http://www.w3.org/1999/xhtml,ABC,Ä -PASS setAttributeNS http://www.w3.org/1999/xhtml,ABC,Ä -PASS getAttributeNS http://www.w3.org/1999/xhtml,ABC,Ä -PASS createElementNS http://www.w3.org/1999/xhtml,ä,abc -PASS setAttributeNS http://www.w3.org/1999/xhtml,ä,abc -PASS getAttributeNS http://www.w3.org/1999/xhtml,ä,abc -PASS createElementNS http://www.w3.org/1999/xhtml,ä,Abc -PASS setAttributeNS http://www.w3.org/1999/xhtml,ä,Abc -PASS getAttributeNS http://www.w3.org/1999/xhtml,ä,Abc -PASS createElementNS http://www.w3.org/1999/xhtml,ä,ABC -PASS setAttributeNS http://www.w3.org/1999/xhtml,ä,ABC -PASS getAttributeNS http://www.w3.org/1999/xhtml,ä,ABC -PASS createElementNS http://www.w3.org/1999/xhtml,ä,ä -PASS setAttributeNS http://www.w3.org/1999/xhtml,ä,ä -PASS getAttributeNS http://www.w3.org/1999/xhtml,ä,ä -PASS createElementNS http://www.w3.org/1999/xhtml,ä,Ä -PASS setAttributeNS http://www.w3.org/1999/xhtml,ä,Ä -PASS getAttributeNS http://www.w3.org/1999/xhtml,ä,Ä -PASS createElementNS http://www.w3.org/1999/xhtml,Ä,abc -PASS setAttributeNS http://www.w3.org/1999/xhtml,Ä,abc -PASS getAttributeNS http://www.w3.org/1999/xhtml,Ä,abc -PASS createElementNS http://www.w3.org/1999/xhtml,Ä,Abc -PASS setAttributeNS http://www.w3.org/1999/xhtml,Ä,Abc -PASS getAttributeNS http://www.w3.org/1999/xhtml,Ä,Abc -PASS createElementNS http://www.w3.org/1999/xhtml,Ä,ABC -PASS setAttributeNS http://www.w3.org/1999/xhtml,Ä,ABC -PASS getAttributeNS http://www.w3.org/1999/xhtml,Ä,ABC -PASS createElementNS http://www.w3.org/1999/xhtml,Ä,ä -PASS setAttributeNS http://www.w3.org/1999/xhtml,Ä,ä -PASS getAttributeNS http://www.w3.org/1999/xhtml,Ä,ä -PASS createElementNS http://www.w3.org/1999/xhtml,Ä,Ä -PASS setAttributeNS http://www.w3.org/1999/xhtml,Ä,Ä -PASS getAttributeNS http://www.w3.org/1999/xhtml,Ä,Ä -PASS createElementNS http://www.w3.org/2000/svg,abc,abc -PASS setAttributeNS http://www.w3.org/2000/svg,abc,abc -PASS getAttributeNS http://www.w3.org/2000/svg,abc,abc -PASS createElementNS http://www.w3.org/2000/svg,abc,Abc -PASS setAttributeNS http://www.w3.org/2000/svg,abc,Abc -PASS getAttributeNS http://www.w3.org/2000/svg,abc,Abc -PASS createElementNS http://www.w3.org/2000/svg,abc,ABC -PASS setAttributeNS http://www.w3.org/2000/svg,abc,ABC -PASS getAttributeNS http://www.w3.org/2000/svg,abc,ABC -PASS createElementNS http://www.w3.org/2000/svg,abc,ä -PASS setAttributeNS http://www.w3.org/2000/svg,abc,ä -PASS getAttributeNS http://www.w3.org/2000/svg,abc,ä -PASS createElementNS http://www.w3.org/2000/svg,abc,Ä -PASS setAttributeNS http://www.w3.org/2000/svg,abc,Ä -PASS getAttributeNS http://www.w3.org/2000/svg,abc,Ä -PASS createElementNS http://www.w3.org/2000/svg,Abc,abc -PASS setAttributeNS http://www.w3.org/2000/svg,Abc,abc -PASS getAttributeNS http://www.w3.org/2000/svg,Abc,abc -PASS createElementNS http://www.w3.org/2000/svg,Abc,Abc -PASS setAttributeNS http://www.w3.org/2000/svg,Abc,Abc -PASS getAttributeNS http://www.w3.org/2000/svg,Abc,Abc -PASS createElementNS http://www.w3.org/2000/svg,Abc,ABC -PASS setAttributeNS http://www.w3.org/2000/svg,Abc,ABC -PASS getAttributeNS http://www.w3.org/2000/svg,Abc,ABC -PASS createElementNS http://www.w3.org/2000/svg,Abc,ä -PASS setAttributeNS http://www.w3.org/2000/svg,Abc,ä -PASS getAttributeNS http://www.w3.org/2000/svg,Abc,ä -PASS createElementNS http://www.w3.org/2000/svg,Abc,Ä -PASS setAttributeNS http://www.w3.org/2000/svg,Abc,Ä -PASS getAttributeNS http://www.w3.org/2000/svg,Abc,Ä -PASS createElementNS http://www.w3.org/2000/svg,ABC,abc -PASS setAttributeNS http://www.w3.org/2000/svg,ABC,abc -PASS getAttributeNS http://www.w3.org/2000/svg,ABC,abc -PASS createElementNS http://www.w3.org/2000/svg,ABC,Abc -PASS setAttributeNS http://www.w3.org/2000/svg,ABC,Abc -PASS getAttributeNS http://www.w3.org/2000/svg,ABC,Abc -PASS createElementNS http://www.w3.org/2000/svg,ABC,ABC -PASS setAttributeNS http://www.w3.org/2000/svg,ABC,ABC -PASS getAttributeNS http://www.w3.org/2000/svg,ABC,ABC -PASS createElementNS http://www.w3.org/2000/svg,ABC,ä -PASS setAttributeNS http://www.w3.org/2000/svg,ABC,ä -PASS getAttributeNS http://www.w3.org/2000/svg,ABC,ä -PASS createElementNS http://www.w3.org/2000/svg,ABC,Ä -PASS setAttributeNS http://www.w3.org/2000/svg,ABC,Ä -PASS getAttributeNS http://www.w3.org/2000/svg,ABC,Ä -PASS createElementNS http://www.w3.org/2000/svg,ä,abc -PASS setAttributeNS http://www.w3.org/2000/svg,ä,abc -PASS getAttributeNS http://www.w3.org/2000/svg,ä,abc -PASS createElementNS http://www.w3.org/2000/svg,ä,Abc -PASS setAttributeNS http://www.w3.org/2000/svg,ä,Abc -PASS getAttributeNS http://www.w3.org/2000/svg,ä,Abc -PASS createElementNS http://www.w3.org/2000/svg,ä,ABC -PASS setAttributeNS http://www.w3.org/2000/svg,ä,ABC -PASS getAttributeNS http://www.w3.org/2000/svg,ä,ABC -PASS createElementNS http://www.w3.org/2000/svg,ä,ä -PASS setAttributeNS http://www.w3.org/2000/svg,ä,ä -PASS getAttributeNS http://www.w3.org/2000/svg,ä,ä -PASS createElementNS http://www.w3.org/2000/svg,ä,Ä -PASS setAttributeNS http://www.w3.org/2000/svg,ä,Ä -PASS getAttributeNS http://www.w3.org/2000/svg,ä,Ä -PASS createElementNS http://www.w3.org/2000/svg,Ä,abc -PASS setAttributeNS http://www.w3.org/2000/svg,Ä,abc -PASS getAttributeNS http://www.w3.org/2000/svg,Ä,abc -PASS createElementNS http://www.w3.org/2000/svg,Ä,Abc -PASS setAttributeNS http://www.w3.org/2000/svg,Ä,Abc -PASS getAttributeNS http://www.w3.org/2000/svg,Ä,Abc -PASS createElementNS http://www.w3.org/2000/svg,Ä,ABC -PASS setAttributeNS http://www.w3.org/2000/svg,Ä,ABC -PASS getAttributeNS http://www.w3.org/2000/svg,Ä,ABC -PASS createElementNS http://www.w3.org/2000/svg,Ä,ä -PASS setAttributeNS http://www.w3.org/2000/svg,Ä,ä -PASS getAttributeNS http://www.w3.org/2000/svg,Ä,ä -PASS createElementNS http://www.w3.org/2000/svg,Ä,Ä -PASS setAttributeNS http://www.w3.org/2000/svg,Ä,Ä -PASS getAttributeNS http://www.w3.org/2000/svg,Ä,Ä -PASS createElementNS http://FOO,abc,abc -PASS setAttributeNS http://FOO,abc,abc -PASS getAttributeNS http://FOO,abc,abc -PASS createElementNS http://FOO,abc,Abc -PASS setAttributeNS http://FOO,abc,Abc -PASS getAttributeNS http://FOO,abc,Abc -PASS createElementNS http://FOO,abc,ABC -PASS setAttributeNS http://FOO,abc,ABC -PASS getAttributeNS http://FOO,abc,ABC -PASS createElementNS http://FOO,abc,ä -PASS setAttributeNS http://FOO,abc,ä -PASS getAttributeNS http://FOO,abc,ä -PASS createElementNS http://FOO,abc,Ä -PASS setAttributeNS http://FOO,abc,Ä -PASS getAttributeNS http://FOO,abc,Ä -PASS createElementNS http://FOO,Abc,abc -PASS setAttributeNS http://FOO,Abc,abc -PASS getAttributeNS http://FOO,Abc,abc -PASS createElementNS http://FOO,Abc,Abc -PASS setAttributeNS http://FOO,Abc,Abc -PASS getAttributeNS http://FOO,Abc,Abc -PASS createElementNS http://FOO,Abc,ABC -PASS setAttributeNS http://FOO,Abc,ABC -PASS getAttributeNS http://FOO,Abc,ABC -PASS createElementNS http://FOO,Abc,ä -PASS setAttributeNS http://FOO,Abc,ä -PASS getAttributeNS http://FOO,Abc,ä -PASS createElementNS http://FOO,Abc,Ä -PASS setAttributeNS http://FOO,Abc,Ä -PASS getAttributeNS http://FOO,Abc,Ä -PASS createElementNS http://FOO,ABC,abc -PASS setAttributeNS http://FOO,ABC,abc -PASS getAttributeNS http://FOO,ABC,abc -PASS createElementNS http://FOO,ABC,Abc -PASS setAttributeNS http://FOO,ABC,Abc -PASS getAttributeNS http://FOO,ABC,Abc -PASS createElementNS http://FOO,ABC,ABC -PASS setAttributeNS http://FOO,ABC,ABC -PASS getAttributeNS http://FOO,ABC,ABC -PASS createElementNS http://FOO,ABC,ä -PASS setAttributeNS http://FOO,ABC,ä -PASS getAttributeNS http://FOO,ABC,ä -PASS createElementNS http://FOO,ABC,Ä -PASS setAttributeNS http://FOO,ABC,Ä -PASS getAttributeNS http://FOO,ABC,Ä -PASS createElementNS http://FOO,ä,abc -PASS setAttributeNS http://FOO,ä,abc -PASS getAttributeNS http://FOO,ä,abc -PASS createElementNS http://FOO,ä,Abc -PASS setAttributeNS http://FOO,ä,Abc -PASS getAttributeNS http://FOO,ä,Abc -PASS createElementNS http://FOO,ä,ABC -PASS setAttributeNS http://FOO,ä,ABC -PASS getAttributeNS http://FOO,ä,ABC -PASS createElementNS http://FOO,ä,ä -PASS setAttributeNS http://FOO,ä,ä -PASS getAttributeNS http://FOO,ä,ä -PASS createElementNS http://FOO,ä,Ä -PASS setAttributeNS http://FOO,ä,Ä -PASS getAttributeNS http://FOO,ä,Ä -PASS createElementNS http://FOO,Ä,abc -PASS setAttributeNS http://FOO,Ä,abc -PASS getAttributeNS http://FOO,Ä,abc -PASS createElementNS http://FOO,Ä,Abc -PASS setAttributeNS http://FOO,Ä,Abc -PASS getAttributeNS http://FOO,Ä,Abc -PASS createElementNS http://FOO,Ä,ABC -PASS setAttributeNS http://FOO,Ä,ABC -PASS getAttributeNS http://FOO,Ä,ABC -PASS createElementNS http://FOO,Ä,ä -PASS setAttributeNS http://FOO,Ä,ä -PASS getAttributeNS http://FOO,Ä,ä -PASS createElementNS http://FOO,Ä,Ä -PASS setAttributeNS http://FOO,Ä,Ä -PASS getAttributeNS http://FOO,Ä,Ä -PASS getElementsByTagNameNS ,abc -PASS getElementsByTagNameNS ,Abc -PASS getElementsByTagNameNS ,ABC -PASS getElementsByTagNameNS ,ä -PASS getElementsByTagNameNS ,Ä -PASS getElementsByTagNameNS http://www.w3.org/1999/xhtml,abc -PASS getElementsByTagNameNS http://www.w3.org/1999/xhtml,Abc -PASS getElementsByTagNameNS http://www.w3.org/1999/xhtml,ABC -PASS getElementsByTagNameNS http://www.w3.org/1999/xhtml,ä -PASS getElementsByTagNameNS http://www.w3.org/1999/xhtml,Ä -PASS getElementsByTagNameNS http://www.w3.org/2000/svg,abc -PASS getElementsByTagNameNS http://www.w3.org/2000/svg,Abc -PASS getElementsByTagNameNS http://www.w3.org/2000/svg,ABC -PASS getElementsByTagNameNS http://www.w3.org/2000/svg,ä -PASS getElementsByTagNameNS http://www.w3.org/2000/svg,Ä -PASS getElementsByTagNameNS http://FOO,abc -PASS getElementsByTagNameNS http://FOO,Abc -PASS getElementsByTagNameNS http://FOO,ABC -PASS getElementsByTagNameNS http://FOO,ä -PASS getElementsByTagNameNS http://FOO,Ä -PASS createElementNS abc -PASS setAttributeNS abc -PASS getAttributeNS abc -PASS createElementNS Abc -PASS setAttributeNS Abc -PASS getAttributeNS Abc -PASS createElementNS ABC -PASS setAttributeNS ABC -PASS getAttributeNS ABC -PASS createElementNS ä -PASS setAttributeNS ä -PASS getAttributeNS ä -PASS createElementNS Ä -PASS setAttributeNS Ä -PASS getAttributeNS Ä -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/Source/core/dom/ContainerNode.cpp b/third_party/WebKit/Source/core/dom/ContainerNode.cpp index 6553bbdf..3831b25 100644 --- a/third_party/WebKit/Source/core/dom/ContainerNode.cpp +++ b/third_party/WebKit/Source/core/dom/ContainerNode.cpp
@@ -1457,23 +1457,24 @@ } } -TagCollection* ContainerNode::getElementsByTagName( - const AtomicString& local_name) { - if (GetDocument().IsHTMLDocument()) +HTMLCollection* ContainerNode::getElementsByTagName( + const AtomicString& qualified_name) { + DCHECK(!qualified_name.IsNull()); + + if (GetDocument().IsHTMLDocument()) { return EnsureCachedCollection<HTMLTagCollection>(kHTMLTagCollectionType, - local_name); - return EnsureCachedCollection<TagCollection>(kTagCollectionType, local_name); + qualified_name); + } + return EnsureCachedCollection<TagCollection>(kTagCollectionType, + qualified_name); } -TagCollection* ContainerNode::getElementsByTagNameNS( +HTMLCollection* ContainerNode::getElementsByTagNameNS( const AtomicString& namespace_uri, const AtomicString& local_name) { - if (namespace_uri == g_star_atom) - return getElementsByTagName(local_name); - - return EnsureCachedCollection<TagCollection>( - kTagCollectionType, namespace_uri.IsEmpty() ? g_null_atom : namespace_uri, - local_name); + return EnsureCachedCollection<TagCollectionNS>( + kTagCollectionNSType, + namespace_uri.IsEmpty() ? g_null_atom : namespace_uri, local_name); } // Takes an AtomicString in argument because it is common for elements to share
diff --git a/third_party/WebKit/Source/core/dom/ContainerNode.h b/third_party/WebKit/Source/core/dom/ContainerNode.h index 2372f2ce..7fb310b 100644 --- a/third_party/WebKit/Source/core/dom/ContainerNode.h +++ b/third_party/WebKit/Source/core/dom/ContainerNode.h
@@ -42,7 +42,6 @@ class NameNodeList; using StaticElementList = StaticNodeTypeList<Element>; class RadioNodeList; -class TagCollection; enum DynamicRestyleFlags { kChildrenOrSiblingsAffectedByFocus = 1 << 0, @@ -120,9 +119,9 @@ Node* AppendChild(Node* new_child, ExceptionState& = ASSERT_NO_EXCEPTION); Element* getElementById(const AtomicString& id) const; - TagCollection* getElementsByTagName(const AtomicString&); - TagCollection* getElementsByTagNameNS(const AtomicString& namespace_uri, - const AtomicString& local_name); + HTMLCollection* getElementsByTagName(const AtomicString&); + HTMLCollection* getElementsByTagNameNS(const AtomicString& namespace_uri, + const AtomicString& local_name); NameNodeList* getElementsByName(const AtomicString& element_name); ClassCollection* getElementsByClassName(const AtomicString& class_names); RadioNodeList* GetRadioNodeList(const AtomicString&,
diff --git a/third_party/WebKit/Source/core/dom/NodeListsNodeData.cpp b/third_party/WebKit/Source/core/dom/NodeListsNodeData.cpp index 1e7cc5b..9a484a1 100644 --- a/third_party/WebKit/Source/core/dom/NodeListsNodeData.cpp +++ b/third_party/WebKit/Source/core/dom/NodeListsNodeData.cpp
@@ -41,14 +41,14 @@ if (attr_name) return; - for (auto& cache : tag_collection_cache_ns_) + for (auto& cache : tag_collection_ns_caches_) cache.value->InvalidateCache(); } DEFINE_TRACE(NodeListsNodeData) { visitor->Trace(child_node_list_); visitor->Trace(atomic_name_caches_); - visitor->Trace(tag_collection_cache_ns_); + visitor->Trace(tag_collection_ns_caches_); } DEFINE_TRACE_WRAPPERS(NodeListsNodeData) { @@ -62,7 +62,7 @@ static_cast<const LiveNodeList*>(list.Get())); } } - for (const auto list : tag_collection_cache_ns_.Values()) { + for (const auto list : tag_collection_ns_caches_.Values()) { visitor->TraceWrappersWithManualWriteBarrier(list.Get()); } }
diff --git a/third_party/WebKit/Source/core/dom/NodeListsNodeData.h b/third_party/WebKit/Source/core/dom/NodeListsNodeData.h index eb942cd6..758d5add 100644 --- a/third_party/WebKit/Source/core/dom/NodeListsNodeData.h +++ b/third_party/WebKit/Source/core/dom/NodeListsNodeData.h
@@ -83,8 +83,8 @@ WeakMember<LiveNodeListBase>, NodeListAtomicCacheMapEntryHash> NodeListAtomicNameCacheMap; - typedef HeapHashMap<QualifiedName, WeakMember<TagCollection>> - TagCollectionCacheNS; + typedef HeapHashMap<QualifiedName, WeakMember<TagCollectionNS>> + TagCollectionNSCache; template <typename T> T* AddCache(ContainerNode& node, @@ -124,18 +124,18 @@ atomic_name_caches_.at(NamedNodeListKey(collection_type, g_star_atom))); } - TagCollection* AddCache(ContainerNode& node, - const AtomicString& namespace_uri, - const AtomicString& local_name) { + TagCollectionNS* AddCache(ContainerNode& node, + const AtomicString& namespace_uri, + const AtomicString& local_name) { DCHECK(ThreadState::Current()->IsGCForbidden()); QualifiedName name(g_null_atom, local_name, namespace_uri); - TagCollectionCacheNS::AddResult result = - tag_collection_cache_ns_.insert(name, nullptr); + TagCollectionNSCache::AddResult result = + tag_collection_ns_caches_.insert(name, nullptr); if (!result.is_new_entry) return result.stored_value->value; - TagCollection* list = - TagCollection::Create(node, namespace_uri, local_name); + TagCollectionNS* list = + TagCollectionNS::Create(node, namespace_uri, local_name); result.stored_value->value = list; ScriptWrappableVisitor::WriteBarrier(this, list); return list; @@ -147,7 +147,7 @@ bool IsEmpty() const { return !child_node_list_ && atomic_name_caches_.IsEmpty() && - tag_collection_cache_ns_.IsEmpty(); + tag_collection_ns_caches_.IsEmpty(); } void AdoptTreeScope() { InvalidateCaches(); } @@ -164,10 +164,10 @@ list->DidMoveToDocument(old_document, new_document); } - TagCollectionCacheNS::const_iterator tag_end = - tag_collection_cache_ns_.end(); - for (TagCollectionCacheNS::const_iterator it = - tag_collection_cache_ns_.begin(); + TagCollectionNSCache::const_iterator tag_end = + tag_collection_ns_caches_.end(); + for (TagCollectionNSCache::const_iterator it = + tag_collection_ns_caches_.begin(); it != tag_end; ++it) { LiveNodeListBase* list = it->value; DCHECK(!list->IsRootedAtTreeScope()); @@ -193,7 +193,7 @@ // Can be a ChildNodeList or an EmptyNodeList. WeakMember<NodeList> child_node_list_; NodeListAtomicNameCacheMap atomic_name_caches_; - TagCollectionCacheNS tag_collection_cache_ns_; + TagCollectionNSCache tag_collection_ns_caches_; }; DEFINE_TRAIT_FOR_TRACE_WRAPPERS(NodeListsNodeData); @@ -217,7 +217,7 @@ CollectionType type, const AtomicString& namespace_uri, const AtomicString& local_name) { - DCHECK_EQ(type, kTagCollectionType); + DCHECK_EQ(type, kTagCollectionNSType); ThreadState::MainThreadGCForbiddenScope gc_forbidden; return EnsureNodeLists().AddCache(*this, namespace_uri, local_name); }
diff --git a/third_party/WebKit/Source/core/dom/TagCollection.cpp b/third_party/WebKit/Source/core/dom/TagCollection.cpp index fb1ef54..e50e6fe 100644 --- a/third_party/WebKit/Source/core/dom/TagCollection.cpp +++ b/third_party/WebKit/Source/core/dom/TagCollection.cpp
@@ -30,17 +30,32 @@ TagCollection::TagCollection(ContainerNode& root_node, CollectionType type, - const AtomicString& namespace_uri, - const AtomicString& local_name) + const AtomicString& qualified_name) + : HTMLCollection(root_node, type, kDoesNotOverrideItemAfter), + qualified_name_(qualified_name) {} + +TagCollection::~TagCollection() {} + +bool TagCollection::ElementMatches(const Element& test_node) const { + if (qualified_name_ == g_star_atom) + return true; + + return qualified_name_ == test_node.TagQName().ToString(); +} + +TagCollectionNS::TagCollectionNS(ContainerNode& root_node, + CollectionType type, + const AtomicString& namespace_uri, + const AtomicString& local_name) : HTMLCollection(root_node, type, kDoesNotOverrideItemAfter), namespace_uri_(namespace_uri), local_name_(local_name) { DCHECK(namespace_uri_.IsNull() || !namespace_uri_.IsEmpty()); } -TagCollection::~TagCollection() {} +TagCollectionNS::~TagCollectionNS() {} -bool TagCollection::ElementMatches(const Element& test_node) const { +bool TagCollectionNS::ElementMatches(const Element& test_node) const { // Implements // https://dom.spec.whatwg.org/#concept-getelementsbytagnamens if (local_name_ != g_star_atom && local_name_ != test_node.localName())
diff --git a/third_party/WebKit/Source/core/dom/TagCollection.h b/third_party/WebKit/Source/core/dom/TagCollection.h index d46f51b..b6ba81ffb 100644 --- a/third_party/WebKit/Source/core/dom/TagCollection.h +++ b/third_party/WebKit/Source/core/dom/TagCollection.h
@@ -33,19 +33,10 @@ class TagCollection : public HTMLCollection { public: static TagCollection* Create(ContainerNode& root_node, - const AtomicString& namespace_uri, - const AtomicString& local_name) { - DCHECK(namespace_uri != g_star_atom); - return new TagCollection(root_node, kTagCollectionType, namespace_uri, - local_name); - } - - static TagCollection* Create(ContainerNode& root_node, CollectionType type, - const AtomicString& local_name) { + const AtomicString& qualified_name) { DCHECK_EQ(type, kTagCollectionType); - return new TagCollection(root_node, kTagCollectionType, g_star_atom, - local_name); + return new TagCollection(root_node, kTagCollectionType, qualified_name); } ~TagCollection() override; @@ -55,8 +46,29 @@ protected: TagCollection(ContainerNode& root_node, CollectionType, - const AtomicString& namespace_uri, - const AtomicString& local_name); + const AtomicString& qualified_name); + + AtomicString qualified_name_; +}; + +class TagCollectionNS : public HTMLCollection { + public: + static TagCollectionNS* Create(ContainerNode& root_node, + const AtomicString& namespace_uri, + const AtomicString& local_name) { + return new TagCollectionNS(root_node, kTagCollectionNSType, namespace_uri, + local_name); + } + + ~TagCollectionNS() override; + + bool ElementMatches(const Element&) const; + + private: + TagCollectionNS(ContainerNode& root_node, + CollectionType, + const AtomicString& namespace_uri, + const AtomicString& local_name); AtomicString namespace_uri_; AtomicString local_name_; @@ -68,6 +80,12 @@ collection->GetType() == kTagCollectionType, collection.GetType() == kTagCollectionType); +DEFINE_TYPE_CASTS(TagCollectionNS, + LiveNodeListBase, + collection, + collection->GetType() == kTagCollectionNSType, + collection.GetType() == kTagCollectionNSType); + } // namespace blink #endif // TagCollection_h
diff --git a/third_party/WebKit/Source/core/editing/InputMethodControllerTest.cpp b/third_party/WebKit/Source/core/editing/InputMethodControllerTest.cpp index 4ad2ef1..ee655ceb 100644 --- a/third_party/WebKit/Source/core/editing/InputMethodControllerTest.cpp +++ b/third_party/WebKit/Source/core/editing/InputMethodControllerTest.cpp
@@ -1408,16 +1408,12 @@ ASSERT_EQ(1u, GetDocument().Markers().Markers().size()); // Verify composition underline shows up on the second line, not the first - ASSERT_EQ(0u, GetDocument() - .Markers() - .MarkersInRange(PlainTextRange(0, 5).CreateRange(*div), - DocumentMarker::AllMarkers()) - .size()); - ASSERT_EQ(1u, GetDocument() - .Markers() - .MarkersInRange(PlainTextRange(6, 11).CreateRange(*div), - DocumentMarker::AllMarkers()) - .size()); + ASSERT_FALSE(GetDocument().Markers().MarkerAtPosition( + PlainTextRange(2).CreateRange(*div).StartPosition(), + DocumentMarker::AllMarkers())); + ASSERT_TRUE(GetDocument().Markers().MarkerAtPosition( + PlainTextRange(8).CreateRange(*div).StartPosition(), + DocumentMarker::AllMarkers())); // Verify marker has correct start/end offsets (measured from the beginning // of the node, which is the beginning of the line)
diff --git a/third_party/WebKit/Source/core/editing/SelectionController.cpp b/third_party/WebKit/Source/core/editing/SelectionController.cpp index 6d9cacb4..444584d 100644 --- a/third_party/WebKit/Source/core/editing/SelectionController.cpp +++ b/third_party/WebKit/Source/core/editing/SelectionController.cpp
@@ -519,14 +519,14 @@ if (pos.IsNotNull()) { const PositionInFlatTree& marker_position = pos.DeepEquivalent().ParentAnchoredEquivalent(); - DocumentMarkerVector markers = - inner_node->GetDocument().Markers().MarkersInRange( - EphemeralRange(ToPositionInDOMTree(marker_position)), + const DocumentMarker* const marker = + inner_node->GetDocument().Markers().MarkerAtPosition( + ToPositionInDOMTree(marker_position), DocumentMarker::MisspellingMarkers()); - if (markers.size() == 1) { + if (marker) { Node* container_node = marker_position.ComputeContainerNode(); - const PositionInFlatTree start(container_node, markers[0]->StartOffset()); - const PositionInFlatTree end(container_node, markers[0]->EndOffset()); + const PositionInFlatTree start(container_node, marker->StartOffset()); + const PositionInFlatTree end(container_node, marker->EndOffset()); new_selection = CreateVisibleSelection( SelectionInFlatTree::Builder().Collapse(start).Extend(end).Build()); } @@ -1018,13 +1018,10 @@ inner_node->GetLayoutObject()->PositionForPoint(result.LocalPoint())); if (pos.IsNull()) return false; - return inner_node->GetDocument() - .Markers() - .MarkersInRange( - EphemeralRange( - pos.DeepEquivalent().ParentAnchoredEquivalent()), - DocumentMarker::MisspellingMarkers()) - .size() > 0; + const Position& marker_position = + pos.DeepEquivalent().ParentAnchoredEquivalent(); + return inner_node->GetDocument().Markers().MarkerAtPosition( + marker_position, DocumentMarker::MisspellingMarkers()); } void SelectionController::SendContextMenuEvent(
diff --git a/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.cpp b/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.cpp index 8caa09c..54dee492 100644 --- a/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.cpp +++ b/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.cpp
@@ -327,6 +327,23 @@ } } +DocumentMarker* DocumentMarkerController::MarkerAtPosition( + const Position& position, + DocumentMarker::MarkerTypes marker_types) { + if (!PossiblyHasMarkers(marker_types)) + return nullptr; + Node* const node = position.ComputeContainerNode(); + const unsigned offset = + static_cast<unsigned>(position.ComputeOffsetInContainerNode()); + + const auto& markers = MarkersFor(node, marker_types); + const auto& it = + std::find_if(markers.begin(), markers.end(), [=](DocumentMarker* marker) { + return marker->StartOffset() < offset && offset < marker->EndOffset(); + }); + return it == markers.end() ? nullptr : *it; +} + DocumentMarkerVector DocumentMarkerController::MarkersFor( Node* node, DocumentMarker::MarkerTypes marker_types) { @@ -371,37 +388,6 @@ return result; } -DocumentMarkerVector DocumentMarkerController::MarkersInRange( - const EphemeralRange& range, - DocumentMarker::MarkerTypes marker_types) { - if (!PossiblyHasMarkers(marker_types)) - return DocumentMarkerVector(); - - DocumentMarkerVector found_markers; - - Node* start_container = range.StartPosition().ComputeContainerNode(); - DCHECK(start_container); - unsigned start_offset = static_cast<unsigned>( - range.StartPosition().ComputeOffsetInContainerNode()); - Node* end_container = range.EndPosition().ComputeContainerNode(); - DCHECK(end_container); - unsigned end_offset = - static_cast<unsigned>(range.EndPosition().ComputeOffsetInContainerNode()); - - for (Node& node : range.Nodes()) { - for (DocumentMarker* marker : MarkersFor(&node)) { - if (!marker_types.Contains(marker->GetType())) - continue; - if (node == start_container && marker->EndOffset() <= start_offset) - continue; - if (node == end_container && marker->StartOffset() >= end_offset) - continue; - found_markers.push_back(marker); - } - } - return found_markers; -} - Vector<IntRect> DocumentMarkerController::RenderedRectsForMarkers( DocumentMarker::MarkerType marker_type) { Vector<IntRect> result;
diff --git a/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.h b/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.h index e367111..4bcc38db 100644 --- a/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.h +++ b/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.h
@@ -86,11 +86,13 @@ bool); bool HasMarkers(Node* node) const { return markers_.Contains(node); } + // Returns a marker of one of the specified types that includes the specified + // Position in its interior (not at an endpoint), if one exists. + DocumentMarker* MarkerAtPosition(const Position&, + DocumentMarker::MarkerTypes); DocumentMarkerVector MarkersFor( Node*, DocumentMarker::MarkerTypes = DocumentMarker::AllMarkers()); - DocumentMarkerVector MarkersInRange(const EphemeralRange&, - DocumentMarker::MarkerTypes); DocumentMarkerVector Markers(); Vector<IntRect> RenderedRectsForMarkers(DocumentMarker::MarkerType); void UpdateMarkerRenderedRectIfNeeded(const Node&, RenderedDocumentMarker&);
diff --git a/third_party/WebKit/Source/core/editing/spellcheck/SpellChecker.cpp b/third_party/WebKit/Source/core/editing/spellcheck/SpellChecker.cpp index 71a48a56..bd6fad96 100644 --- a/third_party/WebKit/Source/core/editing/spellcheck/SpellChecker.cpp +++ b/third_party/WebKit/Source/core/editing/spellcheck/SpellChecker.cpp
@@ -802,17 +802,39 @@ .ToNormalizedEphemeralRange(); if (caret_range.IsNull()) return; - DocumentMarkerVector markers = - GetFrame().GetDocument()->Markers().MarkersInRange( - caret_range, DocumentMarker::MisspellingMarkers()); - if (markers.size() < 1 || - markers[0]->StartOffset() >= markers[0]->EndOffset()) + + Node* const caret_start_container = + caret_range.StartPosition().ComputeContainerNode(); + Node* const caret_end_container = + caret_range.EndPosition().ComputeContainerNode(); + + // We don't currently support the case where a misspelling spans multiple + // nodes + if (caret_start_container != caret_end_container) return; + + const unsigned caret_start_offset = + caret_range.StartPosition().ComputeOffsetInContainerNode(); + const unsigned caret_end_offset = + caret_range.EndPosition().ComputeOffsetInContainerNode(); + + const DocumentMarkerVector& markers_in_node = + GetFrame().GetDocument()->Markers().MarkersFor( + caret_start_container, DocumentMarker::MisspellingMarkers()); + + const auto marker_it = + std::find_if(markers_in_node.begin(), markers_in_node.end(), + [=](const DocumentMarker* marker) { + return marker->StartOffset() < caret_end_offset && + marker->EndOffset() > caret_start_offset; + }); + if (marker_it == markers_in_node.end()) + return; + + const DocumentMarker* found_marker = *marker_it; EphemeralRange marker_range = EphemeralRange( - Position(caret_range.StartPosition().ComputeContainerNode(), - markers[0]->StartOffset()), - Position(caret_range.EndPosition().ComputeContainerNode(), - markers[0]->EndOffset())); + Position(caret_start_container, found_marker->StartOffset()), + Position(caret_start_container, found_marker->EndOffset())); if (marker_range.IsNull()) return;
diff --git a/third_party/WebKit/Source/core/html/CollectionType.h b/third_party/WebKit/Source/core/html/CollectionType.h index 62f8af7..6e679e1 100644 --- a/third_party/WebKit/Source/core/html/CollectionType.h +++ b/third_party/WebKit/Source/core/html/CollectionType.h
@@ -57,6 +57,7 @@ kClassCollectionType, kTagCollectionType, kHTMLTagCollectionType, + kTagCollectionNSType, // Live NodeList. kNameNodeListType,
diff --git a/third_party/WebKit/Source/core/html/HTMLCollection.cpp b/third_party/WebKit/Source/core/html/HTMLCollection.cpp index 07c45002..4f509ba 100644 --- a/third_party/WebKit/Source/core/html/HTMLCollection.cpp +++ b/third_party/WebKit/Source/core/html/HTMLCollection.cpp
@@ -46,6 +46,7 @@ switch (type) { case kClassCollectionType: case kTagCollectionType: + case kTagCollectionNSType: case kHTMLTagCollectionType: case kDocAll: case kDocAnchors: @@ -95,6 +96,7 @@ return NodeListRootType::kTreeScope; case kClassCollectionType: case kTagCollectionType: + case kTagCollectionNSType: case kHTMLTagCollectionType: case kNodeChildren: case kTableTBodies: @@ -125,6 +127,7 @@ CollectionType type) { switch (type) { case kTagCollectionType: + case kTagCollectionNSType: case kHTMLTagCollectionType: case kDocImages: case kDocEmbeds: @@ -244,6 +247,7 @@ return isHTMLObjectElement(element) || IsHTMLFormControlElement(element); case kClassCollectionType: case kTagCollectionType: + case kTagCollectionNSType: case kHTMLTagCollectionType: case kDocAll: case kNodeChildren: @@ -270,6 +274,8 @@ return ToTagCollection(*this).ElementMatches(element); case kHTMLTagCollectionType: return ToHTMLTagCollection(*this).ElementMatches(element); + case kTagCollectionNSType: + return ToTagCollectionNS(*this).ElementMatches(element); case kWindowNamedItems: return ToWindowNameCollection(*this).ElementMatches(element); default:
diff --git a/third_party/WebKit/Source/core/html/HTMLTagCollection.cpp b/third_party/WebKit/Source/core/html/HTMLTagCollection.cpp index c0011d0..5c814539f5 100644 --- a/third_party/WebKit/Source/core/html/HTMLTagCollection.cpp +++ b/third_party/WebKit/Source/core/html/HTMLTagCollection.cpp
@@ -27,9 +27,9 @@ namespace blink { HTMLTagCollection::HTMLTagCollection(ContainerNode& root_node, - const AtomicString& local_name) - : TagCollection(root_node, kHTMLTagCollectionType, g_star_atom, local_name), - lowered_local_name_(local_name.LowerASCII()) { + const AtomicString& qualified_name) + : TagCollection(root_node, kHTMLTagCollectionType, qualified_name), + lowered_qualified_name_(qualified_name.LowerASCII()) { DCHECK(root_node.GetDocument().IsHTMLDocument()); }
diff --git a/third_party/WebKit/Source/core/html/HTMLTagCollection.h b/third_party/WebKit/Source/core/html/HTMLTagCollection.h index 3c493ad..045aaf48 100644 --- a/third_party/WebKit/Source/core/html/HTMLTagCollection.h +++ b/third_party/WebKit/Source/core/html/HTMLTagCollection.h
@@ -36,17 +36,18 @@ public: static HTMLTagCollection* Create(ContainerNode& root_node, CollectionType type, - const AtomicString& local_name) { + const AtomicString& qualified_name) { DCHECK_EQ(type, kHTMLTagCollectionType); - return new HTMLTagCollection(root_node, local_name); + return new HTMLTagCollection(root_node, qualified_name); } bool ElementMatches(const Element&) const; private: - HTMLTagCollection(ContainerNode& root_node, const AtomicString& local_name); + HTMLTagCollection(ContainerNode& root_node, + const AtomicString& qualified_name); - AtomicString lowered_local_name_; + AtomicString lowered_qualified_name_; }; DEFINE_TYPE_CASTS(HTMLTagCollection, @@ -57,16 +58,11 @@ inline bool HTMLTagCollection::ElementMatches( const Element& test_element) const { - // Implements - // https://dom.spec.whatwg.org/#concept-getelementsbytagname - if (local_name_ != g_star_atom) { - const AtomicString& local_name = - test_element.IsHTMLElement() ? lowered_local_name_ : local_name_; - if (local_name != test_element.localName()) - return false; - } - DCHECK_EQ(namespace_uri_, g_star_atom); - return true; + if (qualified_name_ == g_star_atom) + return true; + if (test_element.IsHTMLElement()) + return lowered_qualified_name_ == test_element.TagQName().ToString(); + return qualified_name_ == test_element.TagQName().ToString(); } } // namespace blink
diff --git a/third_party/WebKit/Source/core/paint/BoxPainter.cpp b/third_party/WebKit/Source/core/paint/BoxPainter.cpp index 372f96c..4ec4a3c 100644 --- a/third_party/WebKit/Source/core/paint/BoxPainter.cpp +++ b/third_party/WebKit/Source/core/paint/BoxPainter.cpp
@@ -277,18 +277,17 @@ namespace { -FloatRoundedRect GetBackgroundRoundedRect(const LayoutObject& obj, +FloatRoundedRect GetBackgroundRoundedRect(const ComputedStyle& style, const LayoutRect& border_rect, - const InlineFlowBox* box, - LayoutUnit inline_box_width, - LayoutUnit inline_box_height, + bool has_line_box_sibling, + const LayoutSize& inline_box_size, bool include_logical_left_edge, bool include_logical_right_edge) { - FloatRoundedRect border = obj.Style()->GetRoundedBorderFor( + FloatRoundedRect border = style.GetRoundedBorderFor( border_rect, include_logical_left_edge, include_logical_right_edge); - if (box && (box->NextLineBox() || box->PrevLineBox())) { - FloatRoundedRect segment_border = obj.Style()->GetRoundedBorderFor( - LayoutRect(0, 0, inline_box_width.ToInt(), inline_box_height.ToInt()), + if (has_line_box_sibling) { + FloatRoundedRect segment_border = style.GetRoundedBorderFor( + LayoutRect(LayoutPoint(), LayoutSize(FlooredIntSize(inline_box_size))), include_logical_left_edge, include_logical_right_edge); border.SetRadii(segment_border.GetRadii()); } @@ -296,10 +295,10 @@ } FloatRoundedRect BackgroundRoundedRectAdjustedForBleedAvoidance( - const LayoutObject& obj, + const ComputedStyle& style, const LayoutRect& border_rect, BackgroundBleedAvoidance bleed_avoidance, - const InlineFlowBox* box, + bool has_line_box_sibling, const LayoutSize& box_size, bool include_logical_left_edge, bool include_logical_right_edge) { @@ -311,8 +310,8 @@ // BoxBorderInfo or BoxDecorationData and avoid calling getBorderEdgeInfo // redundantly here. BorderEdge edges[4]; - obj.Style()->GetBorderEdgeInfo(edges, include_logical_left_edge, - include_logical_right_edge); + style.GetBorderEdgeInfo(edges, include_logical_left_edge, + include_logical_right_edge); // Use the most conservative inset to avoid mixed-style corner issues. float fractional_inset = 1.0f / 2; @@ -329,7 +328,7 @@ -fractional_inset * edges[kBSLeft].Width()); FloatRoundedRect background_rounded_rect = GetBackgroundRoundedRect( - obj, border_rect, box, box_size.Width(), box_size.Height(), + style, border_rect, has_line_box_sibling, box_size, include_logical_left_edge, include_logical_right_edge); FloatRect inset_rect(background_rounded_rect.Rect()); inset_rect.Expand(insets); @@ -339,8 +338,8 @@ return FloatRoundedRect(inset_rect, inset_radii); } - return GetBackgroundRoundedRect(obj, border_rect, box, box_size.Width(), - box_size.Height(), include_logical_left_edge, + return GetBackgroundRoundedRect(style, border_rect, has_line_box_sibling, + box_size, include_logical_left_edge, include_logical_right_edge); } @@ -467,7 +466,7 @@ const FillLayer& layer, const LayoutRect& rect, BackgroundBleedAvoidance bleed_avoidance, - const InlineFlowBox* box, + bool has_line_box_sibling, const LayoutSize& box_size, SkBlendMode op, const LayoutObject* background_object, @@ -522,8 +521,8 @@ FloatRoundedRect border = info.is_rounded_fill ? BackgroundRoundedRectAdjustedForBleedAvoidance( - obj, rect, bleed_avoidance, box, box_size, - info.include_left_edge, info.include_right_edge) + obj.StyleRef(), rect, bleed_avoidance, has_line_box_sibling, + box_size, info.include_left_edge, info.include_right_edge) : FloatRoundedRect(PixelSnappedIntRect(rect)); Optional<RoundedInnerRectClipper> clipper; @@ -584,10 +583,11 @@ obj.HasOverflowClip(), color, bg_layer, bleed_avoidance, box); Optional<BackgroundImageGeometry> geometry; + bool has_line_box_sibling = box && (box->NextLineBox() || box->PrevLineBox()); // Fast path for drawing simple color backgrounds. if (PaintFastBottomLayer(obj, paint_info, info, bg_layer, rect, - bleed_avoidance, box, box_size, op, + bleed_avoidance, has_line_box_sibling, box_size, op, background_object, geometry)) { return; } @@ -597,10 +597,10 @@ FloatRoundedRect border = info.is_border_fill ? BackgroundRoundedRectAdjustedForBleedAvoidance( - obj, rect, bleed_avoidance, box, box_size, - info.include_left_edge, info.include_right_edge) + obj.StyleRef(), rect, bleed_avoidance, has_line_box_sibling, + box_size, info.include_left_edge, info.include_right_edge) : GetBackgroundRoundedRect( - obj, rect, box, box_size.Width(), box_size.Height(), + obj.StyleRef(), rect, has_line_box_sibling, box_size, info.include_left_edge, info.include_right_edge); // Clip to the padding or content boxes as necessary.
diff --git a/third_party/WebKit/Source/web/ContextMenuClientImpl.cpp b/third_party/WebKit/Source/web/ContextMenuClientImpl.cpp index 44b0de5c..8654ed99 100644 --- a/third_party/WebKit/Source/web/ContextMenuClientImpl.cpp +++ b/third_party/WebKit/Source/web/ContextMenuClientImpl.cpp
@@ -111,23 +111,49 @@ return String(); // Caret and range selections always return valid normalized ranges. - Range* selection_range = CreateRange(selection.ToNormalizedEphemeralRange()); - DocumentMarkerVector markers = - selected_frame->GetDocument()->Markers().MarkersInRange( - EphemeralRange(selection_range), - DocumentMarker::MisspellingMarkers()); - if (markers.size() != 1) - return String(); - description = markers[0]->Description(); + const EphemeralRange& selection_range = + selection.ToNormalizedEphemeralRange(); - // Cloning a range fails only for invalid ranges. - Range* marker_range = selection_range->cloneRange(); - marker_range->setStart(marker_range->startContainer(), - markers[0]->StartOffset()); - marker_range->setEnd(marker_range->endContainer(), markers[0]->EndOffset()); + Node* const selection_start_container = + selection_range.StartPosition().ComputeContainerNode(); + Node* const selection_end_container = + selection_range.EndPosition().ComputeContainerNode(); + + // We don't currently support the case where a misspelling spans multiple + // nodes + if (selection_start_container != selection_end_container) + return String(); + + const unsigned selection_start_offset = + selection_range.StartPosition().ComputeOffsetInContainerNode(); + const unsigned selection_end_offset = + selection_range.EndPosition().ComputeOffsetInContainerNode(); + + const DocumentMarkerVector& markers_in_node = + selected_frame->GetDocument()->Markers().MarkersFor( + selection_start_container, DocumentMarker::MisspellingMarkers()); + + const auto marker_it = + std::find_if(markers_in_node.begin(), markers_in_node.end(), + [=](const DocumentMarker* marker) { + return marker->StartOffset() < selection_end_offset && + marker->EndOffset() > selection_start_offset; + }); + if (marker_it == markers_in_node.end()) + return String(); + + const DocumentMarker* const found_marker = *marker_it; + description = found_marker->Description(); + + Range* const marker_range = + Range::Create(*selected_frame->GetDocument(), selection_start_container, + found_marker->StartOffset(), selection_start_container, + found_marker->EndOffset()); if (marker_range->GetText().StripWhiteSpace(&IsWhiteSpaceOrPunctuation) != - selection_range->GetText().StripWhiteSpace(&IsWhiteSpaceOrPunctuation)) + CreateRange(selection_range) + ->GetText() + .StripWhiteSpace(&IsWhiteSpaceOrPunctuation)) return String(); return marker_range->GetText();
diff --git a/third_party/WebKit/Source/web/tests/WebFrameTest.cpp b/third_party/WebKit/Source/web/tests/WebFrameTest.cpp index 3c25672..0cc7944 100644 --- a/third_party/WebKit/Source/web/tests/WebFrameTest.cpp +++ b/third_party/WebKit/Source/web/tests/WebFrameTest.cpp
@@ -321,6 +321,36 @@ WebFrame* parent, WebFrame* new_child); + int NumMarkersInRange(const Document* document, + const EphemeralRange& range, + DocumentMarker::MarkerTypes marker_types) { + Node* start_container = range.StartPosition().ComputeContainerNode(); + unsigned start_offset = static_cast<unsigned>( + range.StartPosition().ComputeOffsetInContainerNode()); + + Node* end_container = range.EndPosition().ComputeContainerNode(); + unsigned end_offset = static_cast<unsigned>( + range.EndPosition().ComputeOffsetInContainerNode()); + + int node_count = 0; + for (Node& node : range.Nodes()) { + const DocumentMarkerVector& markers_in_node = + document->Markers().MarkersFor(&node, marker_types); + node_count += std::count_if( + markers_in_node.begin(), markers_in_node.end(), + [start_offset, end_offset, &node, &start_container, + &end_container](const DocumentMarker* marker) { + if (node == start_container && marker->EndOffset() <= start_offset) + return false; + if (node == end_container && marker->StartOffset() >= end_offset) + return false; + return true; + }); + } + + return node_count; + } + std::string base_url_; std::string not_base_url_; std::string chrome_url_; @@ -6611,9 +6641,8 @@ .ToNormalizedEphemeralRange(); EXPECT_EQ(1, textcheck.NumberOfTimesChecked()); - EXPECT_EQ(1U, document->Markers() - .MarkersInRange(selection_range, DocumentMarker::kSpelling) - .size()); + EXPECT_EQ(1, NumMarkersInRange(document, selection_range, + DocumentMarker::kSpelling)); frame->ReplaceMisspelledRange("welcome"); EXPECT_EQ("_welcome_.", @@ -6660,9 +6689,8 @@ .ComputeVisibleSelectionInDOMTreeDeprecated() .ToNormalizedEphemeralRange(); - EXPECT_EQ(0U, document->Markers() - .MarkersInRange(selection_range, DocumentMarker::kSpelling) - .size()); + EXPECT_EQ(0, NumMarkersInRange(document, selection_range, + DocumentMarker::kSpelling)); } static void GetSpellingMarkerOffsets(WebVector<unsigned>* offsets,
diff --git a/third_party/WebKit/Tools/Scripts/run-bindings-tests b/third_party/WebKit/Tools/Scripts/run-bindings-tests index 249e5e41..2bcafb8 100755 --- a/third_party/WebKit/Tools/Scripts/run-bindings-tests +++ b/third_party/WebKit/Tools/Scripts/run-bindings-tests
@@ -26,8 +26,8 @@ import sys from webkitpy.bindings.bindings_tests import run_bindings_tests -from webkitpy.common import webkit_finder -webkit_finder.add_typ_dir_to_sys_path() +from webkitpy.common import path_finder +path_finder.add_typ_dir_to_sys_path() import typ @@ -67,7 +67,7 @@ return argument_parser.exit_status args = runner.args - args.top_level_dir = webkit_finder.get_bindings_scripts_dir() + args.top_level_dir = path_finder.get_bindings_scripts_dir() if not args.skip_unit_tests: return_code, _, _ = runner.run() if return_code != 0:
diff --git a/third_party/WebKit/Tools/Scripts/test-webkitpy b/third_party/WebKit/Tools/Scripts/test-webkitpy index cb02d92a9..4edba76 100755 --- a/third_party/WebKit/Tools/Scripts/test-webkitpy +++ b/third_party/WebKit/Tools/Scripts/test-webkitpy
@@ -31,8 +31,8 @@ import os import sys -from webkitpy.common import webkit_finder -webkit_finder.add_typ_dir_to_sys_path() +from webkitpy.common import path_finder +path_finder.add_typ_dir_to_sys_path() import typ @@ -49,7 +49,7 @@ 'webkitpy.layout_tests.layout_package.bot_test_expectations_unittest.*', ] -sys.exit(typ.main(top_level_dir=webkit_finder.get_scripts_dir(), +sys.exit(typ.main(top_level_dir=path_finder.get_scripts_dir(), skip=skip, - path=[webkit_finder.get_webkitpy_thirdparty_dir()], + path=[path_finder.get_webkitpy_thirdparty_dir()], win_multiprocessing='spawn'))
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/bindings/bindings_tests.py b/third_party/WebKit/Tools/Scripts/webkitpy/bindings/bindings_tests.py index fd2acb94..5147f154 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/bindings/bindings_tests.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/bindings/bindings_tests.py
@@ -31,8 +31,8 @@ from webkitpy.common.system.executive import Executive -from webkitpy.common import webkit_finder -webkit_finder.add_bindings_scripts_dir_to_sys_path() +from webkitpy.common import path_finder +path_finder.add_bindings_scripts_dir_to_sys_path() from code_generator_v8 import CodeGeneratorDictionaryImpl from code_generator_v8 import CodeGeneratorV8 @@ -77,7 +77,7 @@ COMPONENT_DIRECTORY = frozenset(['core', 'modules']) -SOURCE_PATH = webkit_finder.get_source_dir() +SOURCE_PATH = path_finder.get_source_dir() TEST_INPUT_DIRECTORY = os.path.join(SOURCE_PATH, 'bindings', 'tests', 'idls') REFERENCE_DIRECTORY = os.path.join(SOURCE_PATH, 'bindings', 'tests', 'results')
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/common/checkout/baseline_optimizer_unittest.py b/third_party/WebKit/Tools/Scripts/webkitpy/common/checkout/baseline_optimizer_unittest.py index f7f142ba..e227e05 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/common/checkout/baseline_optimizer_unittest.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/common/checkout/baseline_optimizer_unittest.py
@@ -30,7 +30,7 @@ from webkitpy.common.checkout.baseline_optimizer import BaselineOptimizer from webkitpy.common.host_mock import MockHost -from webkitpy.common.webkit_finder import WebKitFinder +from webkitpy.common.path_finder import PathFinder class BaselineOptimizerTest(unittest.TestCase): @@ -38,7 +38,7 @@ def _assert_optimization(self, results_by_directory, directory_to_new_results, baseline_dirname='', host=None): host = host or MockHost() fs = host.filesystem - layout_tests_dir = WebKitFinder(fs).layout_tests_dir() + layout_tests_dir = PathFinder(fs).layout_tests_dir() baseline_name = 'mock-baseline-expected.txt' fs.write_text_file( fs.join(layout_tests_dir, 'VirtualTestSuites'),
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/common/host_mock.py b/third_party/WebKit/Tools/Scripts/webkitpy/common/host_mock.py index 97dd87e25..7189529f 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/common/host_mock.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/common/host_mock.py
@@ -30,8 +30,8 @@ from webkitpy.common.checkout.git_mock import MockGit from webkitpy.common.net.buildbot_mock import MockBuildBot from webkitpy.common.net.web_mock import MockWeb +from webkitpy.common.path_finder import PathFinder from webkitpy.common.system.system_host_mock import MockSystemHost -from webkitpy.common.webkit_finder import WebKitFinder # New-style ports need to move down into webkitpy.common. from webkitpy.layout_tests.builder_list import BuilderList @@ -78,9 +78,9 @@ return self._git def _add_base_manifest_to_mock_filesystem(self, filesystem): - webkit_finder = WebKitFinder(filesystem) + path_finder = PathFinder(filesystem) - external_dir = webkit_finder.path_from_layout_tests('external') + external_dir = path_finder.path_from_layout_tests('external') filesystem.maybe_make_directory(filesystem.join(external_dir, 'wpt')) manifest_base_path = filesystem.join(external_dir, 'WPT_BASE_MANIFEST.json')
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/common/webkit_finder.py b/third_party/WebKit/Tools/Scripts/webkitpy/common/path_finder.py similarity index 99% rename from third_party/WebKit/Tools/Scripts/webkitpy/common/webkit_finder.py rename to third_party/WebKit/Tools/Scripts/webkitpy/common/path_finder.py index aedec30..efdda32f 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/common/webkit_finder.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/common/path_finder.py
@@ -73,7 +73,7 @@ return os.path.join(get_scripts_dir(), 'webkitpy', 'thirdparty') -class WebKitFinder(object): +class PathFinder(object): def __init__(self, filesystem): self._filesystem = filesystem
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/common/webkit_finder_unittest.py b/third_party/WebKit/Tools/Scripts/webkitpy/common/path_finder_unittest.py similarity index 72% rename from third_party/WebKit/Tools/Scripts/webkitpy/common/webkit_finder_unittest.py rename to third_party/WebKit/Tools/Scripts/webkitpy/common/path_finder_unittest.py index 8ccc9243..84e804f 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/common/webkit_finder_unittest.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/common/path_finder_unittest.py
@@ -4,36 +4,36 @@ import unittest -from webkitpy.common.webkit_finder import WebKitFinder +from webkitpy.common.path_finder import PathFinder from webkitpy.common.system.filesystem_mock import MockFileSystem -class TestWebKitFinder(unittest.TestCase): +class TestPathFinder(unittest.TestCase): - # TODO(qyearsley): Add tests for other methods in WebKitFinder. + # TODO(qyearsley): Add tests for other methods in PathFinder. # Including tests for cases when the separator character is backslash. def test_layout_test_name(self): - finder = WebKitFinder(MockFileSystem()) + finder = PathFinder(MockFileSystem()) self.assertEqual( finder.layout_test_name('third_party/WebKit/LayoutTests/test/name.html'), 'test/name.html') def test_layout_test_name_not_in_layout_tests_dir(self): - finder = WebKitFinder(MockFileSystem()) + finder = PathFinder(MockFileSystem()) self.assertIsNone(finder.layout_test_name('some/other/path/file.html')) # pylint: disable=protected-access def test_webkit_base(self): - finder = WebKitFinder(MockFileSystem()) + finder = PathFinder(MockFileSystem()) self.assertEqual(finder._webkit_base(), '/mock-checkout/third_party/WebKit') def test_chromium_base(self): - finder = WebKitFinder(MockFileSystem()) + finder = PathFinder(MockFileSystem()) self.assertEqual(finder.chromium_base(), '/mock-checkout') def test_path_from_chromium_base(self): - finder = WebKitFinder(MockFileSystem()) + finder = PathFinder(MockFileSystem()) self.assertEqual( finder.path_from_chromium_base('foo', 'bar.baz'), '/mock-checkout/foo/bar.baz')
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/bisect_test_ordering.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/bisect_test_ordering.py index 7920da4..591deb084 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/bisect_test_ordering.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/bisect_test_ordering.py
@@ -31,9 +31,9 @@ import subprocess import sys +from webkitpy.common.path_finder import PathFinder from webkitpy.common.system.executive import Executive from webkitpy.common.system.filesystem import FileSystem -from webkitpy.common.webkit_finder import WebKitFinder _log = logging.getLogger(__name__) @@ -54,7 +54,7 @@ self.tests = tests self.expected_failure = tests[-1] self.is_debug = is_debug - self.webkit_finder = WebKitFinder(FileSystem()) + self.path_finder = PathFinder(FileSystem()) def bisect(self): if self.test_fails_in_isolation(): @@ -145,7 +145,7 @@ def test_fails(self, tests): extra_args = ['--debug'] if self.is_debug else [] - path_to_run_webkit_tests = self.webkit_finder.path_from_tools_scripts('run-webkit-tests') + path_to_run_webkit_tests = self.path_finder.path_from_tools_scripts('run-webkit-tests') output = self.executive.popen( [path_to_run_webkit_tests, '--child-processes', '1', '--order', 'none', '--no-retry', '--no-show-results', '--verbose'] + extra_args + tests, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/breakpad/dump_reader_multipart.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/breakpad/dump_reader_multipart.py index c84f2e5..6b50247f 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/breakpad/dump_reader_multipart.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/breakpad/dump_reader_multipart.py
@@ -31,7 +31,7 @@ import threading import Queue -from webkitpy.common.webkit_finder import WebKitFinder +from webkitpy.common.path_finder import PathFinder from webkitpy.layout_tests.breakpad.dump_reader import DumpReader @@ -43,7 +43,7 @@ def __init__(self, host, build_dir): super(DumpReaderMultipart, self).__init__(host, build_dir) - self._webkit_finder = WebKitFinder(host.filesystem) + self._path_finder = PathFinder(host.filesystem) self._breakpad_tools_available = None self._generated_symbols = False @@ -119,7 +119,7 @@ return self._host.filesystem.join(self._build_dir, 'minidump_stackwalk') def _path_to_generate_breakpad_symbols(self): - return self._webkit_finder.path_from_chromium_base( + return self._path_finder.path_from_chromium_base( 'components', 'crash', 'content', 'tools', 'generate_breakpad_symbols.py') def _symbols_dir(self):
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py index 74547b9..73b4185 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py
@@ -45,7 +45,7 @@ from webkitpy.common import exit_codes from webkitpy.common.net.file_uploader import FileUploader -from webkitpy.common.webkit_finder import WebKitFinder +from webkitpy.common.path_finder import PathFinder from webkitpy.layout_tests.controllers.layout_test_finder import LayoutTestFinder from webkitpy.layout_tests.controllers.layout_test_runner import LayoutTestRunner from webkitpy.layout_tests.controllers.test_result_writer import TestResultWriter @@ -91,7 +91,7 @@ self._results_directory = self._port.results_directory() self._finder = LayoutTestFinder(self._port, self._options) - self._webkit_finder = WebKitFinder(port.host.filesystem) + self._path_finder = PathFinder(port.host.filesystem) self._runner = LayoutTestRunner(self._options, self._port, self._printer, self._results_directory, self._test_is_slow) def run(self, args): @@ -541,7 +541,7 @@ _log.error("Upload failed: %s", err) def _copy_results_html_file(self, destination_path): - base_dir = self._webkit_finder.path_from_layout_tests('fast', 'harness') + base_dir = self._path_finder.path_from_layout_tests('fast', 'harness') results_file = self._filesystem.join(base_dir, 'results.html') # Note that the results.html template file won't exist when we're using a MockFileSystem during unit tests, # so make sure it exists before we try to copy it.
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py index 8328a63..567c80e 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py
@@ -33,7 +33,7 @@ import logging import re -from webkitpy.common.webkit_finder import WebKitFinder +from webkitpy.common.path_finder import PathFinder from webkitpy.layout_tests.models.test_configuration import TestConfigurationConverter _log = logging.getLogger(__name__) @@ -1096,7 +1096,7 @@ return REBASELINE in self._model.get_expectations(test) def _shorten_filename(self, filename): - finder = WebKitFinder(self._port.host.filesystem) + finder = PathFinder(self._port.host.filesystem) if filename.startswith(finder.path_from_chromium_base()): return self._port.host.filesystem.relpath(filename, finder.path_from_chromium_base()) return filename
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/base.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/base.py index bd16f41..7d09d3e 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/base.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/base.py
@@ -46,9 +46,9 @@ from webkitpy.common import find_files from webkitpy.common import read_checksum_from_png from webkitpy.common.memoized import memoized +from webkitpy.common.path_finder import PathFinder from webkitpy.common.system.executive import ScriptError from webkitpy.common.system.path import abspath_to_uri -from webkitpy.common.webkit_finder import WebKitFinder from webkitpy.layout_tests.layout_package.bot_test_expectations import BotTestExpectationsFactory from webkitpy.layout_tests.models import test_run_results from webkitpy.layout_tests.models.test_configuration import TestConfiguration @@ -167,7 +167,7 @@ self.host = host self._executive = host.executive self._filesystem = host.filesystem - self._webkit_finder = WebKitFinder(host.filesystem) + self._path_finder = PathFinder(host.filesystem) self._http_server = None self._websocket_server = None @@ -178,7 +178,7 @@ self._dump_reader = None # FIXME: prettypatch.py knows this path; it should not be copied here. - self._pretty_patch_path = self._webkit_finder.path_from_tools_scripts('webkitruby', 'PrettyPatch', 'prettify.rb') + self._pretty_patch_path = self._path_finder.path_from_tools_scripts('webkitruby', 'PrettyPatch', 'prettify.rb') self._pretty_patch_available = None if not hasattr(options, 'configuration') or not options.configuration: @@ -873,16 +873,16 @@ # TODO(qyearsley): Update callers to create a finder and call it instead # of these next two routines (which should be protected). def path_from_chromium_base(self, *comps): - return self._webkit_finder.path_from_chromium_base(*comps) + return self._path_finder.path_from_chromium_base(*comps) def perf_tests_dir(self): - return self._webkit_finder.perf_tests_dir() + return self._path_finder.perf_tests_dir() def layout_tests_dir(self): custom_layout_tests_dir = self.get_option('layout_tests_directory') if custom_layout_tests_dir: return custom_layout_tests_dir - return self._webkit_finder.layout_tests_dir() + return self._path_finder.layout_tests_dir() def skipped_layout_tests(self, _): # TODO(qyearsley): Remove this method. @@ -988,7 +988,7 @@ Ports may legitimately return absolute paths here if no relative path makes sense. - TODO(qyearsley): De-duplicate this and WebKitFinder.layout_test_name. + TODO(qyearsley): De-duplicate this and PathFinder.layout_test_name. """ # Ports that run on windows need to override this method to deal with # filenames with backslashes in them. @@ -1022,7 +1022,7 @@ return self._build_path('resources', 'inspector') def apache_config_directory(self): - return self._webkit_finder.path_from_tools_scripts('apache_config') + return self._path_finder.path_from_tools_scripts('apache_config') def default_results_directory(self): """Returns the absolute path to the default place to store the test results."""
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/factory.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/factory.py index 56a2d63..cdbc1e10 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/factory.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/factory.py
@@ -32,7 +32,7 @@ import optparse import re -from webkitpy.common.webkit_finder import WebKitFinder +from webkitpy.common.path_finder import PathFinder class PortFactory(object): @@ -168,7 +168,7 @@ build_directory = getattr(options, 'build_directory', None) or 'out' target = options.target - finder = WebKitFinder(fs) + finder = PathFinder(fs) path = fs.join(finder.chromium_base(), build_directory, target, 'args.gn') if not fs.exists(path): path = fs.join(finder.chromium_base(), build_directory, target, 'toolchain.ninja')
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/factory_unittest.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/factory_unittest.py index 51ffc07..f1eb93e6 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/factory_unittest.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/factory_unittest.py
@@ -30,7 +30,7 @@ import unittest from webkitpy.common.host_mock import MockHost -from webkitpy.common.webkit_finder import WebKitFinder +from webkitpy.common.path_finder import PathFinder from webkitpy.layout_tests.port import android from webkitpy.layout_tests.port import factory from webkitpy.layout_tests.port import linux @@ -80,10 +80,10 @@ def get_port(self, target=None, configuration=None, files=None): host = MockHost() - wkf = WebKitFinder(host.filesystem) + finder = PathFinder(host.filesystem) files = files or {} for path, contents in files.items(): - host.filesystem.write_text_file(wkf.path_from_chromium_base(path), contents) + host.filesystem.write_text_file(finder.path_from_chromium_base(path), contents) options = optparse.Values({'target': target, 'configuration': configuration}) return factory.PortFactory(host).get(options=options)
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/servers/pywebsocket.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/servers/pywebsocket.py index 69e1fe0..380d1f68 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/servers/pywebsocket.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/servers/pywebsocket.py
@@ -32,7 +32,7 @@ import sys import time -from webkitpy.common.webkit_finder import WebKitFinder +from webkitpy.common.path_finder import PathFinder from webkitpy.layout_tests.servers import server_base @@ -56,7 +56,7 @@ time_str = time.strftime('%d%b%Y-%H%M%S') log_file_name = _WS_LOG_PREFIX + time_str self._error_log = self._filesystem.join(self._output_dir, log_file_name + '-err.txt') - pywebsocket_base = WebKitFinder(self._filesystem).path_from_tools_scripts('webkitpy', 'thirdparty') + pywebsocket_base = PathFinder(self._filesystem).path_from_tools_scripts('webkitpy', 'thirdparty') pywebsocket_script = self._filesystem.join(pywebsocket_base, 'mod_pywebsocket', 'standalone.py') self._start_cmd = [
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/servers/wptserve.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/servers/wptserve.py index e77cca1..776171c 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/servers/wptserve.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/servers/wptserve.py
@@ -7,7 +7,7 @@ import datetime import logging -from webkitpy.common.webkit_finder import WebKitFinder +from webkitpy.common.path_finder import PathFinder from webkitpy.layout_tests.servers import server_base @@ -33,7 +33,7 @@ fs = self._filesystem self._pid_file = fs.join(self._runtime_path, '%s.pid' % self._name) - finder = WebKitFinder(fs) + finder = PathFinder(fs) path_to_thirdparty = finder.path_from_tools_scripts('webkitpy', 'thirdparty') path_to_wpt_support = finder.path_from_tools_scripts('webkitpy', 'thirdparty', 'wpt') path_to_wpt_root = fs.join(path_to_wpt_support, 'wpt')
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/style/checkers/python.py b/third_party/WebKit/Tools/Scripts/webkitpy/style/checkers/python.py index 5f78cca..092e8b2 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/style/checkers/python.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/style/checkers/python.py
@@ -27,9 +27,9 @@ import sys +from webkitpy.common.path_finder import PathFinder from webkitpy.common.system.filesystem import FileSystem from webkitpy.common.system.executive import Executive -from webkitpy.common.webkit_finder import WebKitFinder from webkitpy.thirdparty import pep8 @@ -72,23 +72,23 @@ self._handle_style_error(line_number, category, 5, message) def run_pylint(self, path): - wkf = WebKitFinder(FileSystem()) + finder = PathFinder(FileSystem()) executive = Executive() env = os.environ.copy() env['PYTHONPATH'] = os.pathsep.join([ - wkf.path_from_tools_scripts(), - wkf.path_from_blink_source('build', 'scripts'), - wkf.path_from_tools_scripts('webkitpy', 'thirdparty'), - wkf.path_from_blink_source('bindings', 'scripts'), - wkf.path_from_chromium_base('build', 'android'), - wkf.path_from_chromium_base('third_party', 'catapult', 'devil'), - wkf.path_from_chromium_base('third_party', 'pymock'), + finder.path_from_tools_scripts(), + finder.path_from_blink_source('build', 'scripts'), + finder.path_from_tools_scripts('webkitpy', 'thirdparty'), + finder.path_from_blink_source('bindings', 'scripts'), + finder.path_from_chromium_base('build', 'android'), + finder.path_from_chromium_base('third_party', 'catapult', 'devil'), + finder.path_from_chromium_base('third_party', 'pymock'), ]) return executive.run_command([ sys.executable, - wkf.path_from_depot_tools_base('pylint.py'), + finder.path_from_depot_tools_base('pylint.py'), '--output-format=parseable', - '--rcfile=' + wkf.path_from_tools_scripts('webkitpy', 'pylintrc'), + '--rcfile=' + finder.path_from_tools_scripts('webkitpy', 'pylintrc'), path, ], env=env, error_handler=executive.ignore_error)
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/tool/servers/layout_tests_server.py b/third_party/WebKit/Tools/Scripts/webkitpy/tool/servers/layout_tests_server.py index 77007531..ac1d754 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/tool/servers/layout_tests_server.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/tool/servers/layout_tests_server.py
@@ -33,7 +33,7 @@ import subprocess from subprocess import STDOUT -from webkitpy.common.webkit_finder import WebKitFinder +from webkitpy.common.path_finder import PathFinder from webkitpy.common.system.filesystem import FileSystem from webkitpy.tool.servers.reflection_handler import ReflectionHandler @@ -54,8 +54,8 @@ for each in json_data['tests']: test_list += each + ' ' filesystem = FileSystem() - webkit_finder = WebKitFinder(filesystem) - script_dir = webkit_finder.path_from_tools_scripts() + path_finder = PathFinder(filesystem) + script_dir = path_finder.path_from_tools_scripts() executable_path = script_dir + '/run-webkit-tests' cmd = 'python ' + executable_path + ' --no-show-results ' cmd += test_list
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/chromium_finder.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/chromium_finder.py index 5320390..83ff00cd 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/chromium_finder.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/chromium_finder.py
@@ -3,16 +3,16 @@ # found in the LICENSE file. from webkitpy.common.memoized import memoized -from webkitpy.common.webkit_finder import WebKitFinder +from webkitpy.common.path_finder import PathFinder @memoized def absolute_chromium_wpt_dir(host): - finder = WebKitFinder(host.filesystem) + finder = PathFinder(host.filesystem) return finder.path_from_layout_tests('external', 'wpt') @memoized def absolute_chromium_dir(host): - finder = WebKitFinder(host.filesystem) + finder = PathFinder(host.filesystem) return finder.chromium_base()
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/common.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/common.py index 17751ff..d6cbf3a 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/common.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/common.py
@@ -18,7 +18,7 @@ WPT_REVISION_FOOTER = 'WPT-Export-Revision:' # TODO(qyearsley): This directory should be able to be constructed with -# WebKitFinder and WPT_DEST_NAME, plus the string "external". +# PathFinder and WPT_DEST_NAME, plus the string "external". CHROMIUM_WPT_DIR = 'third_party/WebKit/LayoutTests/external/wpt/' # Our mirrors of the official wpt repo, which we pull from.
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/directory_owners_extractor.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/directory_owners_extractor.py index 3da67383..bd2db91 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/directory_owners_extractor.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/directory_owners_extractor.py
@@ -5,15 +5,15 @@ import collections import re +from webkitpy.common.path_finder import PathFinder from webkitpy.common.system.filesystem import FileSystem -from webkitpy.common.webkit_finder import WebKitFinder class DirectoryOwnersExtractor(object): def __init__(self, filesystem=None): self.filesystem = filesystem or FileSystem - self.finder = WebKitFinder(filesystem) + self.finder = PathFinder(filesystem) self.owner_map = None def read_owner_map(self):
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_copier.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_copier.py index 4cbfd76..a9d84ee 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_copier.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_copier.py
@@ -34,7 +34,7 @@ import logging import mimetypes -from webkitpy.common.webkit_finder import WebKitFinder +from webkitpy.common.path_finder import PathFinder from webkitpy.layout_tests.models.test_expectations import TestExpectationParser _log = logging.getLogger(__name__) @@ -59,8 +59,8 @@ self.dest_dir_name = dest_dir_name self.filesystem = self.host.filesystem - self.webkit_finder = WebKitFinder(self.filesystem) - self.layout_tests_dir = self.webkit_finder.layout_tests_dir() + self.path_finder = PathFinder(self.filesystem) + self.layout_tests_dir = self.path_finder.layout_tests_dir() self.destination_directory = self.filesystem.normpath( self.filesystem.join( self.layout_tests_dir, @@ -141,7 +141,7 @@ def find_paths_to_skip(self): paths_to_skip = set() port = self.host.port_factory.get() - w3c_import_expectations_path = self.webkit_finder.path_from_layout_tests('W3CImportExpectations') + w3c_import_expectations_path = self.path_finder.path_from_layout_tests('W3CImportExpectations') w3c_import_expectations = self.filesystem.read_text_file(w3c_import_expectations_path) parser = TestExpectationParser(port, all_tests=(), is_lint_mode=False) expectation_lines = parser.parse(w3c_import_expectations_path, w3c_import_expectations)
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer.py index 7d122ae..993de8f6 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer.py
@@ -19,8 +19,8 @@ import logging from webkitpy.common.net.git_cl import GitCL -from webkitpy.common.webkit_finder import WebKitFinder from webkitpy.common.net.buildbot import current_build_link +from webkitpy.common.path_finder import PathFinder from webkitpy.layout_tests.models.test_expectations import TestExpectations, TestExpectationParser from webkitpy.layout_tests.port.base import Port from webkitpy.w3c.common import WPT_REPO_URL, WPT_DEST_NAME, exportable_commits_since @@ -43,7 +43,7 @@ self.host = host self.executive = host.executive self.fs = host.filesystem - self.finder = WebKitFinder(self.fs) + self.finder = PathFinder(self.fs) self.verbose = False self.git_cl = None
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/wpt_expectations_updater.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/wpt_expectations_updater.py index d5d9bbc..bac29bc 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/wpt_expectations_updater.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/wpt_expectations_updater.py
@@ -15,7 +15,7 @@ from webkitpy.common.memoized import memoized from webkitpy.common.net.git_cl import GitCL -from webkitpy.common.webkit_finder import WebKitFinder +from webkitpy.common.path_finder import PathFinder from webkitpy.layout_tests.models.test_expectations import TestExpectationLine, TestExpectations from webkitpy.w3c.wpt_manifest import WPTManifest @@ -29,7 +29,7 @@ def __init__(self, host): self.host = host self.port = self.host.port_factory.get() - self.finder = WebKitFinder(self.host.filesystem) + self.finder = PathFinder(self.host.filesystem) self.port = self.host.port_factory.get() def run(self, args=None):
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/wpt_manifest.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/wpt_manifest.py index e5863a0..05cee668 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/wpt_manifest.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/wpt_manifest.py
@@ -12,7 +12,7 @@ import json import logging -from webkitpy.common.webkit_finder import WebKitFinder +from webkitpy.common.path_finder import PathFinder _log = logging.getLogger(__file__) @@ -90,7 +90,7 @@ @staticmethod def ensure_manifest(host): """Checks whether the manifest exists, and then generates it if necessary.""" - finder = WebKitFinder(host.filesystem) + finder = PathFinder(host.filesystem) manifest_path = finder.path_from_layout_tests('external', 'wpt', 'MANIFEST.json') base_manifest_path = finder.path_from_layout_tests('external', 'WPT_BASE_MANIFEST.json') @@ -112,7 +112,7 @@ def generate_manifest(host, dest_path): """Generates MANIFEST.json on the specified directory.""" executive = host.executive - finder = WebKitFinder(host.filesystem) + finder = PathFinder(host.filesystem) manifest_exec_path = finder.path_from_tools_scripts('webkitpy', 'thirdparty', 'wpt', 'wpt', 'manifest') cmd = ['python', manifest_exec_path, '--work', '--tests-root', dest_path]