diff --git a/DEPS b/DEPS index 39e5ab1..2b667b55 100644 --- a/DEPS +++ b/DEPS
@@ -78,7 +78,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. - 'v8_revision': 'f4f2b219905f3cf2df2a376a6986fd3e3d8341ae', + 'v8_revision': 'b0cb35c7c2a189e1594deb6cd83b6fb25bd0e2aa', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling swarming_client # and whatever else without interference from each other.
diff --git a/android_webview/tools/system_webview_shell/test/data/webexposed/not-webview-exposed.txt b/android_webview/tools/system_webview_shell/test/data/webexposed/not-webview-exposed.txt index 98fd97cf..3adcef5 100644 --- a/android_webview/tools/system_webview_shell/test/data/webexposed/not-webview-exposed.txt +++ b/android_webview/tools/system_webview_shell/test/data/webexposed/not-webview-exposed.txt
@@ -39,7 +39,7 @@ # remoteplayback api not supported in webview crbug.com/521319 interface RemotePlayback : EventTarget -# web payments api not enabled in webiew, crbug.com/667069 +# web payments api not enabled in webview, crbug.com/667069 interface HTMLIFrameElement : HTMLElement getter allowPaymentRequest setter allowPaymentRequest @@ -53,13 +53,15 @@ getter disableRemotePlayback # crbug.com/521319 getter remote # crbug.com/521319 -# permissions API (crbug.com/490120), presentation API (crbug.com/521319) and -# custom scheme handlers (crbug.com/589502) not supported in webview +# permissions API (crbug.com/490120), presentation API (crbug.com/521319), +# share API (crbug.com/765923) and custom scheme handlers (crbug.com/589502) +# not supported in webview interface Navigator getter permissions # crbug.com/490120 getter presentation # crbug.com/521319 method registerProtocolHandler # crbug.com/589502 method unregisterProtocolHandler # crbug.com/589502 + method share # crbug.com/765923 # notifications not yet supported in webview, crbug.com/551446 interface ServiceWorkerRegistration : EventTarget
diff --git a/base/win/com_init_check_hook.h b/base/win/com_init_check_hook.h index c064eea1..c9982335 100644 --- a/base/win/com_init_check_hook.h +++ b/base/win/com_init_check_hook.h
@@ -19,7 +19,8 @@ #if DCHECK_IS_ON() && defined(ARCH_CPU_X86_FAMILY) && \ defined(ARCH_CPU_32_BITS) && !defined(GOOGLE_CHROME_BUILD) && \ - !defined(OFFICIAL_BUILD) + !defined(OFFICIAL_BUILD) && \ + !defined(COM_INIT_CHECK_HOOK_DISABLED) // See crbug/737090 for details. #define COM_INIT_CHECK_HOOK_ENABLED #endif
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBackupWatcher.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeBackupWatcher.java index 4cb204c..2e8fac5 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBackupWatcher.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeBackupWatcher.java
@@ -18,7 +18,7 @@ * Class for watching for changes to the Android preferences that are backed up using Android * key/value backup. */ -@JNINamespace("chrome::android") +@JNINamespace("android") public class ChromeBackupWatcher { private BackupManager mBackupManager;
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index c1c503a3..0628342 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -2213,11 +2213,6 @@ flag_descriptions::kV8CacheStrategiesForCacheStorageName, flag_descriptions::kV8CacheStrategiesForCacheStorageDescription, kOsAll, MULTI_VALUE_TYPE(kV8CacheStrategiesForCacheStorageChoices)}, - {"enable-clear-browsing-data-counters", - flag_descriptions::kEnableClearBrowsingDataCountersName, - flag_descriptions::kEnableClearBrowsingDataCountersDescription, kOsAll, - ENABLE_DISABLE_VALUE_TYPE(switches::kEnableClearBrowsingDataCounters, - switches::kDisableClearBrowsingDataCounters)}, {"simplified-fullscreen-ui", flag_descriptions::kSimplifiedFullscreenUiName, flag_descriptions::kSimplifiedFullscreenUiDescription, kOsWin | kOsLinux | kOsCrOS,
diff --git a/chrome/browser/android/chrome_backup_agent.cc b/chrome/browser/android/chrome_backup_agent.cc index cb4f8927..4e475329 100644 --- a/chrome/browser/android/chrome_backup_agent.cc +++ b/chrome/browser/android/chrome_backup_agent.cc
@@ -46,8 +46,8 @@ static base::android::ScopedJavaLocalRef<jobjectArray> GetBoolBackupNames( JNIEnv* env, const base::android::JavaParamRef<jobject>& jcaller) { - return base::android::ToJavaArrayOfStrings( - env, chrome::android::GetBackupPrefNames()); + return base::android::ToJavaArrayOfStrings(env, + android::GetBackupPrefNames()); } static base::android::ScopedJavaLocalRef<jbooleanArray> GetBoolBackupValues( @@ -86,7 +86,6 @@ prefs->CommitPendingWrite(); } -namespace chrome { namespace android { std::vector<std::string> GetBackupPrefNames() { @@ -115,4 +114,3 @@ } } // namespace android -} // namespace chrome
diff --git a/chrome/browser/android/chrome_backup_agent.h b/chrome/browser/android/chrome_backup_agent.h index 3a03cd0..829bbc3 100644 --- a/chrome/browser/android/chrome_backup_agent.h +++ b/chrome/browser/android/chrome_backup_agent.h
@@ -10,7 +10,6 @@ #include "base/android/jni_android.h" -namespace chrome { namespace android { std::vector<std::string> GetBackupPrefNames(); @@ -29,6 +28,5 @@ const base::android::JavaParamRef<jbooleanArray>& values); } // namespace android -} // namespace chrome #endif // CHROME_BROWSER_ANDROID_CHROME_BACKUP_AGENT_H_
diff --git a/chrome/browser/android/chrome_backup_agent_unittest.cc b/chrome/browser/android/chrome_backup_agent_unittest.cc index bdd901c..8c46de5 100644 --- a/chrome/browser/android/chrome_backup_agent_unittest.cc +++ b/chrome/browser/android/chrome_backup_agent_unittest.cc
@@ -21,7 +21,6 @@ #include "content/public/test/test_browser_thread_bundle.h" #include "testing/gtest/include/gtest/gtest.h" -namespace chrome { namespace android { using base::android::AppendJavaStringArrayToStringVector; @@ -139,4 +138,3 @@ } } // namespace android -} // namespace chrome
diff --git a/chrome/browser/android/chrome_backup_watcher.cc b/chrome/browser/android/chrome_backup_watcher.cc index da084fe..02b340f 100644 --- a/chrome/browser/android/chrome_backup_watcher.cc +++ b/chrome/browser/android/chrome_backup_watcher.cc
@@ -7,7 +7,6 @@ #include "chrome/browser/profiles/profile.h" #include "jni/ChromeBackupWatcher_jni.h" -namespace chrome { namespace android { namespace { @@ -35,4 +34,3 @@ ChromeBackupWatcher::~ChromeBackupWatcher() {} } // namespace android -} // namespace chrome
diff --git a/chrome/browser/android/chrome_backup_watcher.h b/chrome/browser/android/chrome_backup_watcher.h index d8eab67..7fe305e 100644 --- a/chrome/browser/android/chrome_backup_watcher.h +++ b/chrome/browser/android/chrome_backup_watcher.h
@@ -15,7 +15,6 @@ class Profile; -namespace chrome { namespace android { // Watch the preferences that we back up using Android Backup, so that we can @@ -32,5 +31,4 @@ }; } // namespace android -} // namespace chrome #endif // CHROME_BROWSER_ANDROID_CHROME_BACKUP_WATCHER_H_
diff --git a/chrome/browser/browsing_data/browsing_data_counter_factory.cc b/chrome/browser/browsing_data/browsing_data_counter_factory.cc index 532abf1..82c279ad 100644 --- a/chrome/browser/browsing_data/browsing_data_counter_factory.cc +++ b/chrome/browser/browsing_data/browsing_data_counter_factory.cc
@@ -51,9 +51,6 @@ std::unique_ptr<browsing_data::BrowsingDataCounter> BrowsingDataCounterFactory::GetForProfileAndPref(Profile* profile, const std::string& pref_name) { - if (!AreCountersEnabled()) - return nullptr; - if (pref_name == browsing_data::prefs::kDeleteBrowsingHistory) { return base::MakeUnique<browsing_data::HistoryCounter>( HistoryServiceFactory::GetForProfile(
diff --git a/chrome/browser/browsing_data/browsing_data_counter_utils.cc b/chrome/browser/browsing_data/browsing_data_counter_utils.cc index 589988a..5fe9d3f 100644 --- a/chrome/browser/browsing_data/browsing_data_counter_utils.cc +++ b/chrome/browser/browsing_data/browsing_data_counter_utils.cc
@@ -28,21 +28,6 @@ #endif -bool AreCountersEnabled() { - if (base::CommandLine::ForCurrentProcess()->HasSwitch( - switches::kEnableClearBrowsingDataCounters)) { - return true; - } - - if (base::CommandLine::ForCurrentProcess()->HasSwitch( - switches::kDisableClearBrowsingDataCounters)) { - return false; - } - - // Enabled by default. - return true; -} - bool IsSiteDataCounterEnabled() { // Only use the site data counter for the new CBD ui. return base::FeatureList::IsEnabled(features::kTabsInCbd);
diff --git a/chrome/browser/browsing_data/browsing_data_counter_utils.h b/chrome/browser/browsing_data/browsing_data_counter_utils.h index a6a417b..480d0c2 100644 --- a/chrome/browser/browsing_data/browsing_data_counter_utils.h +++ b/chrome/browser/browsing_data/browsing_data_counter_utils.h
@@ -9,9 +9,6 @@ #include "components/browsing_data/core/browsing_data_utils.h" #include "components/browsing_data/core/counters/browsing_data_counter.h" -// Whether the browsing data counters experiment is enabled. -bool AreCountersEnabled(); - // Whether the site data counter is enabled. bool IsSiteDataCounterEnabled();
diff --git a/chrome/browser/chrome_browser_main_android.cc b/chrome/browser/chrome_browser_main_android.cc index 15f5810..0530c9e4 100644 --- a/chrome/browser/chrome_browser_main_android.cc +++ b/chrome/browser/chrome_browser_main_android.cc
@@ -94,7 +94,7 @@ // Start watching the preferences that need to be backed up backup using // Android backup, so that we create a new backup if they change. - backup_watcher_.reset(new chrome::android::ChromeBackupWatcher(profile())); + backup_watcher_.reset(new android::ChromeBackupWatcher(profile())); } void ChromeBrowserMainPartsAndroid::PreEarlyInitialization() {
diff --git a/chrome/browser/chrome_browser_main_android.h b/chrome/browser/chrome_browser_main_android.h index b1325399..ad8ea32 100644 --- a/chrome/browser/chrome_browser_main_android.h +++ b/chrome/browser/chrome_browser_main_android.h
@@ -26,7 +26,7 @@ private: std::unique_ptr<base::MessageLoop> main_message_loop_; - std::unique_ptr<chrome::android::ChromeBackupWatcher> backup_watcher_; + std::unique_ptr<android::ChromeBackupWatcher> backup_watcher_; DISALLOW_COPY_AND_ASSIGN(ChromeBrowserMainPartsAndroid); };
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index aee74d5..bbe3e91 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -326,11 +326,6 @@ const char kEnableBrotliDescription[] = "Enable Brotli Content-Encoding support."; -const char kEnableClearBrowsingDataCountersName[] = - "Enable Clear browsing data counters."; -const char kEnableClearBrowsingDataCountersDescription[] = - "Shows data volume counters in the Clear browsing data dialog."; - const char kEnableClientLoFiName[] = "Client-side Lo-Fi previews"; const char kEnableClientLoFiDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index 62181f78..078876b 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -222,9 +222,6 @@ extern const char kEnableBrotliName[]; extern const char kEnableBrotliDescription[]; -extern const char kEnableClearBrowsingDataCountersName[]; -extern const char kEnableClearBrowsingDataCountersDescription[]; - extern const char kEnableClientLoFiName[]; extern const char kEnableClientLoFiDescription[];
diff --git a/chrome/browser/net/network_context_configuration_browsertest.cc b/chrome/browser/net/network_context_configuration_browsertest.cc index cd937e4..ebe0c8f 100644 --- a/chrome/browser/net/network_context_configuration_browsertest.cc +++ b/chrome/browser/net/network_context_configuration_browsertest.cc
@@ -311,7 +311,7 @@ EXPECT_TRUE(mojo::common::BlockingCopyToString(client.response_body_release(), &response_body)); client.RunUntilComplete(); - EXPECT_EQ(net::OK, client.status().error_code); + EXPECT_EQ(net::OK, client.completion_status().error_code); // The response body from the above test should only appear in the view-cache // result if there is an on-disk cache.
diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc index e4104b8..4dca90b 100644 --- a/chrome/common/chrome_switches.cc +++ b/chrome/common/chrome_switches.cc
@@ -190,10 +190,6 @@ const char kDisableCastStreamingHWEncoding[] = "disable-cast-streaming-hw-encoding"; -// Disables data volume counters in the Clear Browsing Data dialog. -const char kDisableClearBrowsingDataCounters[] = - "disable-clear-browsing-data-counters"; - // Disables the client-side phishing detection feature. Note that even if // client-side phishing detection is enabled, it will only be active if the // user has opted in to UMA stats and SafeBrowsing is enabled in the @@ -296,10 +292,6 @@ // Enables the multi-level undo system for bookmarks. const char kEnableBookmarkUndo[] = "enable-bookmark-undo"; -// Enables data volume counters in the Clear Browsing Data dialog. -const char kEnableClearBrowsingDataCounters[] = - "enable-clear-browsing-data-counters"; - // This applies only when the process type is "service". Enables the Cloud Print // Proxy component within the service process. const char kEnableCloudPrintProxy[] = "enable-cloud-print-proxy";
diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h index 7ce8c30..e5bab429 100644 --- a/chrome/common/chrome_switches.h +++ b/chrome/common/chrome_switches.h
@@ -73,7 +73,6 @@ extern const char kDisableBackgroundNetworking[]; extern const char kDisableBundledPpapiFlash[]; extern const char kDisableCastStreamingHWEncoding[]; -extern const char kDisableClearBrowsingDataCounters[]; extern const char kDisableClientSidePhishingDetection[]; extern const char kDisableComponentExtensionsWithBackgroundPages[]; extern const char kDisableComponentUpdate[]; @@ -100,7 +99,6 @@ extern const char kEasyUnlockAppPath[]; extern const char kEnableAudioDebugRecordingsFromExtension[]; extern const char kEnableBookmarkUndo[]; -extern const char kEnableClearBrowsingDataCounters[]; extern const char kEnableCloudPrintProxy[]; extern const char kEnableDeviceDiscoveryNotifications[]; extern const char kEnableDevToolsExperiments[];
diff --git a/chrome/renderer/extensions/extension_localization_peer.cc b/chrome/renderer/extensions/extension_localization_peer.cc index 8da32e9..d7cab95 100644 --- a/chrome/renderer/extensions/extension_localization_peer.cc +++ b/chrome/renderer/extensions/extension_localization_peer.cc
@@ -17,7 +17,7 @@ #include "ipc/ipc_sender.h" #include "net/base/net_errors.h" #include "net/http/http_response_headers.h" -#include "services/network/public/cpp/url_loader_status.h" +#include "services/network/public/cpp/url_loader_completion_status.h" namespace { @@ -91,12 +91,12 @@ } void ExtensionLocalizationPeer::OnCompletedRequest( - const network::URLLoaderStatus& status) { + const network::URLLoaderCompletionStatus& status) { // Give sub-classes a chance at altering the data. if (status.error_code != net::OK) { // We failed to load the resource. original_peer_->OnReceivedResponse(response_info_); - network::URLLoaderStatus aborted_status(status); + network::URLLoaderCompletionStatus aborted_status(status); aborted_status.error_code = net::ERR_ABORTED; original_peer_->OnCompletedRequest(aborted_status); return;
diff --git a/chrome/renderer/extensions/extension_localization_peer.h b/chrome/renderer/extensions/extension_localization_peer.h index c39cf77..82226e6 100644 --- a/chrome/renderer/extensions/extension_localization_peer.h +++ b/chrome/renderer/extensions/extension_localization_peer.h
@@ -43,7 +43,8 @@ void OnDownloadedData(int len, int encoded_data_length) override {} void OnReceivedData(std::unique_ptr<ReceivedData> data) override; void OnTransferSizeUpdated(int transfer_size_diff) override; - void OnCompletedRequest(const network::URLLoaderStatus& status) override; + void OnCompletedRequest( + const network::URLLoaderCompletionStatus& status) override; private: friend class ExtensionLocalizationPeerTest;
diff --git a/chrome/renderer/extensions/extension_localization_peer_unittest.cc b/chrome/renderer/extensions/extension_localization_peer_unittest.cc index 817dcb0d..62cd578 100644 --- a/chrome/renderer/extensions/extension_localization_peer_unittest.cc +++ b/chrome/renderer/extensions/extension_localization_peer_unittest.cc
@@ -19,7 +19,7 @@ #include "net/base/net_errors.h" #include "net/url_request/redirect_info.h" #include "net/url_request/url_request_status.h" -#include "services/network/public/cpp/url_loader_status.h" +#include "services/network/public/cpp/url_loader_completion_status.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -78,7 +78,7 @@ MOCK_METHOD2(OnReceivedDataInternal, void(const char* data, int data_length)); MOCK_METHOD1(OnTransferSizeUpdated, void(int transfer_size_diff)); MOCK_METHOD1(OnCompletedRequest, - void(const network::URLLoaderStatus& status)); + void(const network::URLLoaderCompletionStatus& status)); private: DISALLOW_COPY_AND_ASSIGN(MockRequestPeer); @@ -147,7 +147,7 @@ SetUpExtensionLocalizationPeer("text/css", GURL(kExtensionUrl_1)); EXPECT_CALL(*original_peer_, OnReceivedResponse(_)); - network::URLLoaderStatus status(net::ERR_ABORTED); + network::URLLoaderCompletionStatus status(net::ERR_ABORTED); EXPECT_CALL(*original_peer_, OnCompletedRequest(status)); filter_peer_->OnCompletedRequest(status); @@ -160,7 +160,7 @@ EXPECT_CALL(*sender_, Send(_)).Times(0); EXPECT_CALL(*original_peer_, OnReceivedResponse(_)); - network::URLLoaderStatus status(net::OK); + network::URLLoaderCompletionStatus status(net::OK); EXPECT_CALL(*original_peer_, OnCompletedRequest(status)); filter_peer_->OnCompletedRequest(status); @@ -178,7 +178,7 @@ EXPECT_CALL(*original_peer_, OnReceivedDataInternal(StrEq(data.c_str()), data.length())) .Times(1); - network::URLLoaderStatus status(net::OK); + network::URLLoaderCompletionStatus status(net::OK); EXPECT_CALL(*original_peer_, OnCompletedRequest(status)).Times(1); filter_peer_->OnCompletedRequest(status); @@ -215,7 +215,7 @@ EXPECT_CALL(*original_peer_, OnReceivedDataInternal(StrEq(data.c_str()), data.length())); - network::URLLoaderStatus status(net::OK); + network::URLLoaderCompletionStatus status(net::OK); EXPECT_CALL(*original_peer_, OnCompletedRequest(status)); filter_peer_->OnCompletedRequest(status); @@ -241,7 +241,7 @@ EXPECT_CALL(*original_peer_, OnReceivedDataInternal(StrEq(message.c_str()), message.length())); - network::URLLoaderStatus status(net::OK); + network::URLLoaderCompletionStatus status(net::OK); EXPECT_CALL(*original_peer_, OnCompletedRequest(status)); filter_peer_->OnCompletedRequest(status);
diff --git a/chrome/renderer/security_filter_peer.cc b/chrome/renderer/security_filter_peer.cc index 5081b91f..8202932 100644 --- a/chrome/renderer/security_filter_peer.cc +++ b/chrome/renderer/security_filter_peer.cc
@@ -14,7 +14,7 @@ #include "content/public/renderer/fixed_received_data.h" #include "net/base/net_errors.h" #include "net/http/http_response_headers.h" -#include "services/network/public/cpp/url_loader_status.h" +#include "services/network/public/cpp/url_loader_completion_status.h" #include "ui/base/l10n/l10n_util.h" SecurityFilterPeer::SecurityFilterPeer( @@ -138,7 +138,7 @@ } void ReplaceContentPeer::OnCompletedRequest( - const network::URLLoaderStatus& status) { + const network::URLLoaderCompletionStatus& status) { content::ResourceResponseInfo info; ProcessResponseInfo(info, &info, mime_type_); info.content_length = static_cast<int>(data_.size()); @@ -147,7 +147,7 @@ original_peer_->OnReceivedData(base::MakeUnique<content::FixedReceivedData>( data_.data(), data_.size())); } - network::URLLoaderStatus ok_status(status); + network::URLLoaderCompletionStatus ok_status(status); ok_status.error_code = net::OK; original_peer_->OnCompletedRequest(ok_status); }
diff --git a/chrome/renderer/security_filter_peer.h b/chrome/renderer/security_filter_peer.h index 776bd117..05f77aa 100644 --- a/chrome/renderer/security_filter_peer.h +++ b/chrome/renderer/security_filter_peer.h
@@ -66,7 +66,8 @@ // content::RequestPeer Implementation. void OnReceivedResponse(const content::ResourceResponseInfo& info) override; void OnReceivedData(std::unique_ptr<ReceivedData> data) override; - void OnCompletedRequest(const network::URLLoaderStatus& status) override; + void OnCompletedRequest( + const network::URLLoaderCompletionStatus& status) override; private: content::ResourceResponseInfo response_info_;
diff --git a/chrome/test/data/window.close.html b/chrome/test/data/window.close.html index e534082b..b53cf4a 100644 --- a/chrome/test/data/window.close.html +++ b/chrome/test/data/window.close.html
@@ -31,7 +31,7 @@ function test4() { console.log("test4"); openPopups(); - setTimeout(closePopupsAndDone, 250); + setTimeout(closePopupsAndDone, 1); } function openPopups() {
diff --git a/chromeos/dbus/fake_shill_device_client.cc b/chromeos/dbus/fake_shill_device_client.cc index 3751981..8511828f 100644 --- a/chromeos/dbus/fake_shill_device_client.cc +++ b/chromeos/dbus/fake_shill_device_client.cc
@@ -389,7 +389,7 @@ DBusThreadManager::Get()->GetShillManagerClient()->GetTestInterface()-> AddDevice(device_path); - base::DictionaryValue* properties = GetDeviceProperties(device_path); + base::Value* properties = GetDeviceProperties(device_path); properties->SetKey(shill::kTypeProperty, base::Value(type)); properties->SetKey(shill::kNameProperty, base::Value(name)); properties->SetKey(shill::kDBusObjectProperty, base::Value(device_path)); @@ -521,21 +521,18 @@ void FakeShillDeviceClient::SetSimLockStatus(const std::string& device_path, const SimLockStatus& status) { - base::DictionaryValue* device_properties = NULL; - if (!stub_devices_.GetDictionaryWithoutPathExpansion(device_path, - &device_properties)) { + base::Value* device_properties = + stub_devices_.FindKeyOfType(device_path, base::Value::Type::DICTIONARY); + + if (!device_properties) { NOTREACHED() << "Device not found: " << device_path; return; } - base::DictionaryValue* simlock_dict = nullptr; - if (!device_properties->GetDictionaryWithoutPathExpansion( - shill::kSIMLockStatusProperty, &simlock_dict)) { - simlock_dict = device_properties->SetDictionaryWithoutPathExpansion( - shill::kSIMLockStatusProperty, - std::make_unique<base::DictionaryValue>()); - } - simlock_dict->Clear(); + base::Value* simlock_dict = + device_properties->SetKey(shill::kSIMLockStatusProperty, + base::Value(base::Value::Type::DICTIONARY)); + simlock_dict->SetKey(shill::kSIMLockTypeProperty, base::Value(status.type)); simlock_dict->SetKey(shill::kSIMLockRetriesLeftProperty, base::Value(status.retries_left)); @@ -642,15 +639,14 @@ observer.OnPropertyChanged(property, *value); } -base::DictionaryValue* FakeShillDeviceClient::GetDeviceProperties( +base::Value* FakeShillDeviceClient::GetDeviceProperties( const std::string& device_path) { - base::DictionaryValue* properties = NULL; - if (!stub_devices_.GetDictionaryWithoutPathExpansion( - device_path, &properties)) { - properties = stub_devices_.SetDictionaryWithoutPathExpansion( - device_path, std::make_unique<base::DictionaryValue>()); - } - return properties; + base::Value* properties = + stub_devices_.FindKeyOfType(device_path, base::Value::Type::DICTIONARY); + if (properties) + return properties; + return stub_devices_.SetKey(device_path, + base::Value(base::Value::Type::DICTIONARY)); } FakeShillDeviceClient::PropertyObserverList&
diff --git a/chromeos/dbus/fake_shill_device_client.h b/chromeos/dbus/fake_shill_device_client.h index efc96b1..0355d7e 100644 --- a/chromeos/dbus/fake_shill_device_client.h +++ b/chromeos/dbus/fake_shill_device_client.h
@@ -140,7 +140,7 @@ void NotifyObserversPropertyChanged(const dbus::ObjectPath& device_path, const std::string& property); - base::DictionaryValue* GetDeviceProperties(const std::string& device_path); + base::Value* GetDeviceProperties(const std::string& device_path); PropertyObserverList& GetObserverList(const dbus::ObjectPath& device_path); // Dictionary of <device_name, Dictionary>.
diff --git a/chromeos/dbus/fake_shill_ipconfig_client.cc b/chromeos/dbus/fake_shill_ipconfig_client.cc index d540214..7879ec1 100644 --- a/chromeos/dbus/fake_shill_ipconfig_client.cc +++ b/chromeos/dbus/fake_shill_ipconfig_client.cc
@@ -61,12 +61,13 @@ const std::string& name, const base::Value& value, VoidDBusMethodCallback callback) { - base::DictionaryValue* dict = NULL; - if (!ipconfigs_.GetDictionaryWithoutPathExpansion(ipconfig_path.value(), - &dict)) { - dict = ipconfigs_.SetDictionaryWithoutPathExpansion( - ipconfig_path.value(), std::make_unique<base::DictionaryValue>()); + base::Value* dict = ipconfigs_.FindKeyOfType(ipconfig_path.value(), + base::Value::Type::DICTIONARY); + if (!dict) { + dict = ipconfigs_.SetKey(ipconfig_path.value(), + base::Value(base::Value::Type::DICTIONARY)); } + // Update existing ip config stub object's properties. dict->SetKey(name, value.Clone()); base::ThreadTaskRunnerHandle::Get()->PostTask(
diff --git a/chromeos/dbus/fake_shill_service_client.cc b/chromeos/dbus/fake_shill_service_client.cc index 3028f68e..b92d611 100644 --- a/chromeos/dbus/fake_shill_service_client.cc +++ b/chromeos/dbus/fake_shill_service_client.cc
@@ -402,10 +402,8 @@ std::string key = property; if (base::StartsWith(property, "Provider.", case_sensitive)) key = property.substr(strlen("Provider.")); - base::DictionaryValue* provider = - new_properties.SetDictionaryWithoutPathExpansion( - shill::kProviderProperty, - std::make_unique<base::DictionaryValue>()); + base::Value* provider = new_properties.SetKey( + shill::kProviderProperty, base::Value(base::Value::Type::DICTIONARY)); provider->SetKey(key, value.Clone()); changed_property = shill::kProviderProperty; } else if (value.GetType() == base::Value::Type::DICTIONARY) {
diff --git a/chromeos/network/client_cert_util.cc b/chromeos/network/client_cert_util.cc index 561035d3..8260a21 100644 --- a/chromeos/network/client_cert_util.cc +++ b/chromeos/network/client_cert_util.cc
@@ -186,7 +186,7 @@ void SetShillProperties(const ConfigType cert_config_type, const int tpm_slot, const std::string& pkcs11_id, - base::DictionaryValue* properties) { + base::Value* properties) { switch (cert_config_type) { case CONFIG_TYPE_NONE: { return; @@ -224,7 +224,7 @@ } void SetEmptyShillProperties(const ConfigType cert_config_type, - base::DictionaryValue* properties) { + base::Value* properties) { switch (cert_config_type) { case CONFIG_TYPE_NONE: { return;
diff --git a/chromeos/network/client_cert_util.h b/chromeos/network/client_cert_util.h index 1911dfe..19b9c16 100644 --- a/chromeos/network/client_cert_util.h +++ b/chromeos/network/client_cert_util.h
@@ -14,6 +14,7 @@ #include "components/onc/onc_constants.h" namespace base { +class Value; class DictionaryValue; } @@ -91,12 +92,12 @@ CHROMEOS_EXPORT void SetShillProperties(const ConfigType cert_config_type, const int tpm_slot, const std::string& pkcs11_id, - base::DictionaryValue* properties); + base::Value* properties); // Like SetShillProperties but instead sets the properties to empty strings. // This should be used to clear previously set client certificate properties. CHROMEOS_EXPORT void SetEmptyShillProperties(const ConfigType cert_config_type, - base::DictionaryValue* properties); + base::Value* properties); // Returns true if all required configuration properties are set and not empty. bool IsCertificateConfigured(const client_cert::ConfigType cert_config_type,
diff --git a/chromeos/network/device_state.cc b/chromeos/network/device_state.cc index 60ccefd..9ada46827 100644 --- a/chromeos/network/device_state.cc +++ b/chromeos/network/device_state.cc
@@ -123,20 +123,11 @@ return false; } -void DeviceState::IPConfigPropertiesChanged( - const std::string& ip_config_path, - const base::DictionaryValue& properties) { - base::DictionaryValue* ip_config = nullptr; - if (ip_configs_.GetDictionaryWithoutPathExpansion( - ip_config_path, &ip_config)) { - NET_LOG_EVENT("IPConfig Updated: " + ip_config_path, path()); - ip_config->Clear(); - } else { - NET_LOG_EVENT("IPConfig Added: " + ip_config_path, path()); - ip_config = ip_configs_.SetDictionaryWithoutPathExpansion( - ip_config_path, std::make_unique<base::DictionaryValue>()); - } - ip_config->MergeDictionary(&properties); +void DeviceState::IPConfigPropertiesChanged(const std::string& ip_config_path, + const base::Value& properties) { + NET_LOG(EVENT) << "IPConfig for: " << path() + << " Changed: " << ip_config_path; + ip_configs_.SetKey(ip_config_path, properties.Clone()); } std::string DeviceState::GetName() const {
diff --git a/chromeos/network/device_state.h b/chromeos/network/device_state.h index 973cb625..bdb695ba 100644 --- a/chromeos/network/device_state.h +++ b/chromeos/network/device_state.h
@@ -28,7 +28,7 @@ const base::Value& value) override; void IPConfigPropertiesChanged(const std::string& ip_config_path, - const base::DictionaryValue& properties); + const base::Value& properties); // Accessors const std::string& mac_address() const { return mac_address_; }
diff --git a/chromeos/network/onc/onc_translator_onc_to_shill.cc b/chromeos/network/onc/onc_translator_onc_to_shill.cc index 834c40c..7c3e2d7d 100644 --- a/chromeos/network/onc/onc_translator_onc_to_shill.cc +++ b/chromeos/network/onc/onc_translator_onc_to_shill.cc
@@ -433,25 +433,22 @@ // results are written to |shill_dictionary|. void TranslateONCHierarchy(const OncValueSignature& signature, const base::DictionaryValue& onc_object, - base::DictionaryValue* shill_dictionary) { - base::DictionaryValue* target_shill_dictionary = shill_dictionary; - std::vector<std::string> path_to_shill_dictionary = + base::Value* shill_dictionary) { + const std::vector<std::string> path = GetPathToNestedShillDictionary(signature); - for (std::vector<std::string>::const_iterator it = - path_to_shill_dictionary.begin(); - it != path_to_shill_dictionary.end(); ++it) { - base::DictionaryValue* nested_shill_dict = NULL; - if (!target_shill_dictionary->GetDictionaryWithoutPathExpansion( - *it, &nested_shill_dict)) { - nested_shill_dict = - target_shill_dictionary->SetDictionaryWithoutPathExpansion( - *it, std::make_unique<base::DictionaryValue>()); - } - target_shill_dictionary = nested_shill_dict; + const std::vector<base::StringPiece> path_pieces(path.begin(), path.end()); + base::Value* target_shill_dictionary = shill_dictionary->FindPathOfType( + path_pieces, base::Value::Type::DICTIONARY); + if (!target_shill_dictionary) { + target_shill_dictionary = shill_dictionary->SetPath( + path_pieces, base::Value(base::Value::Type::DICTIONARY)); } + // Translates fields of |onc_object| and writes them to // |target_shill_dictionary_| nested in |shill_dictionary|. - LocalTranslator translator(signature, onc_object, target_shill_dictionary); + LocalTranslator translator( + signature, onc_object, + static_cast<base::DictionaryValue*>(target_shill_dictionary)); translator.TranslateFields(); // Recurse into nested objects.
diff --git a/chromeos/network/onc/onc_translator_shill_to_onc.cc b/chromeos/network/onc/onc_translator_shill_to_onc.cc index 4062454..2198fd2 100644 --- a/chromeos/network/onc/onc_translator_shill_to_onc.cc +++ b/chromeos/network/onc/onc_translator_shill_to_onc.cc
@@ -731,13 +731,7 @@ const std::string& onc_dictionary_name, const std::string& onc_field_name, const base::Value& value) { - base::DictionaryValue* nested = nullptr; - if (!onc_object_->GetDictionaryWithoutPathExpansion(onc_dictionary_name, - &nested)) { - nested = onc_object_->SetDictionaryWithoutPathExpansion( - onc_dictionary_name, std::make_unique<base::DictionaryValue>()); - } - nested->SetKey(onc_field_name, value.Clone()); + onc_object_->SetPath({onc_dictionary_name, onc_field_name}, value.Clone()); } void ShillToONCTranslator::TranslateAndAddListOfObjects(
diff --git a/chromeos/network/policy_util.cc b/chromeos/network/policy_util.cc index 14940b9f..6ea9807 100644 --- a/chromeos/network/policy_util.cc +++ b/chromeos/network/policy_util.cc
@@ -161,22 +161,15 @@ return autoconnect; } -base::DictionaryValue* GetOrCreateDictionary(const std::string& key, - base::DictionaryValue* dict) { - base::DictionaryValue* inner_dict = NULL; - if (!dict->GetDictionaryWithoutPathExpansion(key, &inner_dict)) { - inner_dict = dict->SetDictionaryWithoutPathExpansion( - key, std::make_unique<base::DictionaryValue>()); - } - return inner_dict; -} - -base::DictionaryValue* GetOrCreateNestedDictionary( - const std::string& key1, - const std::string& key2, - base::DictionaryValue* dict) { - base::DictionaryValue* inner_dict = GetOrCreateDictionary(key1, dict); - return GetOrCreateDictionary(key2, inner_dict); +base::Value* GetOrCreateNestedDictionary(const std::string& key1, + const std::string& key2, + base::Value* dict) { + base::Value* inner_dict = + dict->FindPathOfType({key1, key2}, base::Value::Type::DICTIONARY); + if (inner_dict) + return inner_dict; + return dict->SetPath({key1, key2}, + base::Value(base::Value::Type::DICTIONARY)); } void ApplyGlobalAutoconnectPolicy( @@ -192,7 +185,7 @@ // Managed dictionaries don't contain empty dictionaries (see onc_merger.cc), // so add the Autoconnect dictionary in case Shill didn't report a value. - base::DictionaryValue* auto_connect_dictionary = NULL; + base::Value* auto_connect_dictionary = nullptr; if (type == ::onc::network_type::kWiFi) { auto_connect_dictionary = GetOrCreateNestedDictionary(::onc::network_config::kWiFi,
diff --git a/content/browser/appcache/appcache_subresource_url_factory.cc b/content/browser/appcache/appcache_subresource_url_factory.cc index 7f11fb74..fdda849 100644 --- a/content/browser/appcache/appcache_subresource_url_factory.cc +++ b/content/browser/appcache/appcache_subresource_url_factory.cc
@@ -71,7 +71,8 @@ void Start() { if (!host_) { - remote_client_->OnComplete(network::URLLoaderStatus(net::ERR_FAILED)); + remote_client_->OnComplete( + network::URLLoaderCompletionStatus(net::ERR_FAILED)); return; } handler_ = host_->CreateRequestHandler( @@ -200,7 +201,8 @@ const ResourceResponseHead& response_head) override { DCHECK(network_loader_) << "appcache loader does not produce redirects"; if (!redirect_limit_--) { - OnComplete(network::URLLoaderStatus(net::ERR_TOO_MANY_REDIRECTS)); + OnComplete( + network::URLLoaderCompletionStatus(net::ERR_TOO_MANY_REDIRECTS)); return; } if (!handler_) { @@ -246,7 +248,7 @@ remote_client_->OnStartLoadingResponseBody(std::move(body)); } - void OnComplete(const network::URLLoaderStatus& status) override { + void OnComplete(const network::URLLoaderCompletionStatus& status) override { if (!network_loader_ || !handler_ || did_receive_network_response_ || status.error_code == net::OK) { remote_client_->OnComplete(status); @@ -258,7 +260,7 @@ weak_factory_.GetWeakPtr(), status)); } - void ContinueOnComplete(const network::URLLoaderStatus& status, + void ContinueOnComplete(const network::URLLoaderCompletionStatus& status, StartLoaderCallback start_function) { if (start_function) CreateAndStartAppCacheLoader(std::move(start_function));
diff --git a/content/browser/appcache/appcache_update_job_unittest.cc b/content/browser/appcache/appcache_update_job_unittest.cc index 39669773..baa648a 100644 --- a/content/browser/appcache/appcache_update_job_unittest.cc +++ b/content/browser/appcache/appcache_update_job_unittest.cc
@@ -608,7 +608,7 @@ traffic_annotation) override { if (url_request.url.host() == "failme" || url_request.url.host() == "testme") { - client->OnComplete(network::URLLoaderStatus(-100)); + client->OnComplete(network::URLLoaderCompletionStatus(-100)); return; }
diff --git a/content/browser/appcache/appcache_update_url_loader_request.cc b/content/browser/appcache/appcache_update_url_loader_request.cc index 3e66fda..72a9a0b 100644 --- a/content/browser/appcache/appcache_update_url_loader_request.cc +++ b/content/browser/appcache/appcache_update_url_loader_request.cc
@@ -161,7 +161,7 @@ } void AppCacheUpdateJob::UpdateURLLoaderRequest::OnComplete( - const network::URLLoaderStatus& status) { + const network::URLLoaderCompletionStatus& status) { response_status_ = status; // We inform the URLFetcher about a failure only here. For the success case // OnResponseCompleted() is invoked by URLFetcher::OnReadCompleted().
diff --git a/content/browser/appcache/appcache_update_url_loader_request.h b/content/browser/appcache/appcache_update_url_loader_request.h index 582814e..a8aabc4 100644 --- a/content/browser/appcache/appcache_update_url_loader_request.h +++ b/content/browser/appcache/appcache_update_url_loader_request.h
@@ -67,7 +67,7 @@ void OnTransferSizeUpdated(int32_t transfer_size_diff) override; void OnStartLoadingResponseBody( mojo::ScopedDataPipeConsumerHandle body) override; - void OnComplete(const network::URLLoaderStatus& status) override; + void OnComplete(const network::URLLoaderCompletionStatus& status) override; private: UpdateURLLoaderRequest(URLLoaderFactoryGetter* loader_factory_getter, @@ -92,7 +92,7 @@ ResourceRequest request_; ResourceResponseHead response_; - network::URLLoaderStatus response_status_; + network::URLLoaderCompletionStatus response_status_; // Response details. std::unique_ptr<net::HttpResponseInfo> http_response_info_; // Binds the URLLoaderClient interface to the channel.
diff --git a/content/browser/appcache/appcache_url_loader_job.cc b/content/browser/appcache/appcache_url_loader_job.cc index bb47f1a..a7aeb018 100644 --- a/content/browser/appcache/appcache_url_loader_job.cc +++ b/content/browser/appcache/appcache_url_loader_job.cc
@@ -319,7 +319,7 @@ if (AppCacheRequestHandler::IsRunningInTests()) return; - network::URLLoaderStatus status(error_code); + network::URLLoaderCompletionStatus status(error_code); if (!error_code) { const net::HttpResponseInfo* http_info = is_range_request() ? range_response_info_.get()
diff --git a/content/browser/blob_storage/blob_internals_url_loader.cc b/content/browser/blob_storage/blob_internals_url_loader.cc index 218291c..b5e2c98 100644 --- a/content/browser/blob_storage/blob_internals_url_loader.cc +++ b/content/browser/blob_storage/blob_internals_url_loader.cc
@@ -40,7 +40,7 @@ CHECK_EQ(result, MOJO_RESULT_OK); client->OnStartLoadingResponseBody(std::move(data_pipe.consumer_handle)); - network::URLLoaderStatus status(net::OK); + network::URLLoaderCompletionStatus status(net::OK); status.encoded_data_length = output.size(); status.encoded_body_length = output.size(); client->OnComplete(status);
diff --git a/content/browser/blob_storage/blob_url_loader_factory.cc b/content/browser/blob_storage/blob_url_loader_factory.cc index 50eb7714..ec5c43f6 100644 --- a/content/browser/blob_storage/blob_url_loader_factory.cc +++ b/content/browser/blob_storage/blob_url_loader_factory.cc
@@ -189,7 +189,7 @@ status_code, nullptr, nullptr, 0, 0); client_->OnReceiveResponse(response, base::nullopt, nullptr); } - network::URLLoaderStatus status; + network::URLLoaderCompletionStatus status; // TODO(kinuko): We should probably set the error_code here, // while it makes existing tests fail. crbug.com/732750 status.completion_time = base::TimeTicks::Now();
diff --git a/content/browser/blob_storage/blob_url_unittest.cc b/content/browser/blob_storage/blob_url_unittest.cc index f5fbe22..8640a946d 100644 --- a/content/browser/blob_storage/blob_url_unittest.cc +++ b/content/browser/blob_storage/blob_url_unittest.cc
@@ -300,7 +300,7 @@ } response_headers_ = url_loader_client.response_head().headers; response_metadata_ = url_loader_client.cached_metadata(); - response_error_code_ = url_loader_client.status().error_code; + response_error_code_ = url_loader_client.completion_status().error_code; } else { std::unique_ptr<net::URLRequest> request = url_request_context_.CreateRequest(url, net::DEFAULT_PRIORITY,
diff --git a/content/browser/devtools/protocol/network_handler.cc b/content/browser/devtools/protocol/network_handler.cc index ffa8f89..9ab8b5c 100644 --- a/content/browser/devtools/protocol/network_handler.cc +++ b/content/browser/devtools/protocol/network_handler.cc
@@ -49,7 +49,7 @@ #include "net/http/http_util.h" #include "net/url_request/url_request_context.h" #include "net/url_request/url_request_context_getter.h" -#include "services/network/public/cpp/url_loader_status.h" +#include "services/network/public/cpp/url_loader_completion_status.h" namespace content { namespace protocol { @@ -1053,7 +1053,7 @@ void NetworkHandler::NavigationPreloadCompleted( const std::string& request_id, - const network::URLLoaderStatus& status) { + const network::URLLoaderCompletionStatus& status) { if (!enabled_) return; if (status.error_code != net::OK) {
diff --git a/content/browser/devtools/protocol/network_handler.h b/content/browser/devtools/protocol/network_handler.h index a1e9ef2..76a06e5 100644 --- a/content/browser/devtools/protocol/network_handler.h +++ b/content/browser/devtools/protocol/network_handler.h
@@ -23,7 +23,7 @@ } // namespace net namespace network { -struct URLLoaderStatus; +struct URLLoaderCompletionStatus; } // namespace network namespace content { @@ -125,7 +125,7 @@ const ResourceResponseHead& head); void NavigationPreloadCompleted( const std::string& request_id, - const network::URLLoaderStatus& completion_status); + const network::URLLoaderCompletionStatus& completion_status); void NavigationFailed(NavigationRequest* navigation_request); bool enabled() const { return enabled_; }
diff --git a/content/browser/devtools/service_worker_devtools_agent_host.cc b/content/browser/devtools/service_worker_devtools_agent_host.cc index 7431c51d4..63fb561 100644 --- a/content/browser/devtools/service_worker_devtools_agent_host.cc +++ b/content/browser/devtools/service_worker_devtools_agent_host.cc
@@ -137,7 +137,7 @@ void ServiceWorkerDevToolsAgentHost::NavigationPreloadCompleted( const std::string& request_id, - const network::URLLoaderStatus& status) { + const network::URLLoaderCompletionStatus& status) { for (auto* network : protocol::NetworkHandler::ForAgentHost(this)) network->NavigationPreloadCompleted(request_id, status); }
diff --git a/content/browser/devtools/service_worker_devtools_agent_host.h b/content/browser/devtools/service_worker_devtools_agent_host.h index 2ba72ab1..c0acba1 100644 --- a/content/browser/devtools/service_worker_devtools_agent_host.h +++ b/content/browser/devtools/service_worker_devtools_agent_host.h
@@ -15,7 +15,7 @@ #include "content/browser/devtools/worker_devtools_agent_host.h" namespace network { -struct URLLoaderStatus; +struct URLLoaderCompletionStatus; } namespace content { @@ -56,8 +56,9 @@ void NavigationPreloadResponseReceived(const std::string& request_id, const GURL& url, const ResourceResponseHead& head); - void NavigationPreloadCompleted(const std::string& request_id, - const network::URLLoaderStatus& status); + void NavigationPreloadCompleted( + const std::string& request_id, + const network::URLLoaderCompletionStatus& status); int64_t service_worker_version_id() const; GURL scope() const;
diff --git a/content/browser/download/download_manager_impl.cc b/content/browser/download/download_manager_impl.cc index a9b092c..370b88f 100644 --- a/content/browser/download/download_manager_impl.cc +++ b/content/browser/download/download_manager_impl.cc
@@ -200,7 +200,7 @@ std::unique_ptr<ResourceRequest> resource_request, std::unique_ptr<ThrottlingURLLoader> url_loader, std::vector<GURL> url_chain, - base::Optional<network::URLLoaderStatus> status) { + base::Optional<network::URLLoaderCompletionStatus> status) { DCHECK_CURRENTLY_ON(BrowserThread::IO); DownloadManagerImpl::UniqueUrlDownloadHandlerPtr resource_downloader( ResourceDownloader::InterceptNavigationResponse(
diff --git a/content/browser/download/download_response_handler.cc b/content/browser/download/download_response_handler.cc index 495740a6..4fe28a5 100644 --- a/content/browser/download/download_response_handler.cc +++ b/content/browser/download/download_response_handler.cc
@@ -144,7 +144,7 @@ // middle box. Trigger another interruption so that the DownloadItem can // retry. abort_reason_ = DOWNLOAD_INTERRUPT_REASON_SERVER_UNREACHABLE; - OnComplete(network::URLLoaderStatus(net::OK)); + OnComplete(network::URLLoaderCompletionStatus(net::OK)); return; } url_chain_.push_back(redirect_info.new_url); @@ -180,7 +180,7 @@ } void DownloadResponseHandler::OnComplete( - const network::URLLoaderStatus& status) { + const network::URLLoaderCompletionStatus& status) { DownloadInterruptReason reason = HandleRequestCompletionStatus( static_cast<net::Error>(status.error_code), has_strong_validators_, cert_status_, abort_reason_);
diff --git a/content/browser/download/download_response_handler.h b/content/browser/download/download_response_handler.h index 99fd2dcc..99ba960 100644 --- a/content/browser/download/download_response_handler.h +++ b/content/browser/download/download_response_handler.h
@@ -56,7 +56,7 @@ void OnTransferSizeUpdated(int32_t transfer_size_diff) override; void OnStartLoadingResponseBody( mojo::ScopedDataPipeConsumerHandle body) override; - void OnComplete(const network::URLLoaderStatus& status) override; + void OnComplete(const network::URLLoaderCompletionStatus& status) override; // Sets the URL chain when the download is intercepted from navigation. void SetURLChain(std::vector<GURL> url_chain);
diff --git a/content/browser/download/resource_downloader.cc b/content/browser/download/resource_downloader.cc index e90619ef..40443672 100644 --- a/content/browser/download/resource_downloader.cc +++ b/content/browser/download/resource_downloader.cc
@@ -86,7 +86,7 @@ int frame_tree_node_id, std::unique_ptr<ThrottlingURLLoader> url_loader, std::vector<GURL> url_chain, - base::Optional<network::URLLoaderStatus> status) { + base::Optional<network::URLLoaderCompletionStatus> status) { auto downloader = std::make_unique<ResourceDownloader>( delegate, std::move(resource_request), std::make_unique<DownloadSaveInfo>(), content::DownloadItem::kInvalidId, @@ -154,7 +154,7 @@ const SSLStatus& ssl_status, int frame_tree_node_id, std::vector<GURL> url_chain, - base::Optional<network::URLLoaderStatus> status) { + base::Optional<network::URLLoaderCompletionStatus> status) { url_loader_ = std::move(url_loader); url_loader_->set_forwarding_client(&response_handler_); net::SSLInfo info;
diff --git a/content/browser/download/resource_downloader.h b/content/browser/download/resource_downloader.h index 95080573..ba43904 100644 --- a/content/browser/download/resource_downloader.h +++ b/content/browser/download/resource_downloader.h
@@ -41,7 +41,7 @@ int frame_tree_node_id, std::unique_ptr<ThrottlingURLLoader> url_loader, std::vector<GURL> url_chain, - base::Optional<network::URLLoaderStatus> status); + base::Optional<network::URLLoaderCompletionStatus> status); ResourceDownloader(base::WeakPtr<UrlDownloadHandler::Delegate> delegate, std::unique_ptr<ResourceRequest> resource_request, @@ -66,13 +66,14 @@ std::unique_ptr<DownloadUrlParameters> download_url_parameters); // Intercepts the navigation response and takes ownership of the |url_loader|. - void InterceptResponse(std::unique_ptr<ThrottlingURLLoader> url_loader, - const scoped_refptr<ResourceResponse>& response, - mojo::ScopedDataPipeConsumerHandle consumer_handle, - const SSLStatus& ssl_status, - int frame_tree_node_id, - std::vector<GURL> url_chain, - base::Optional<network::URLLoaderStatus> status); + void InterceptResponse( + std::unique_ptr<ThrottlingURLLoader> url_loader, + const scoped_refptr<ResourceResponse>& response, + mojo::ScopedDataPipeConsumerHandle consumer_handle, + const SSLStatus& ssl_status, + int frame_tree_node_id, + std::vector<GURL> url_chain, + base::Optional<network::URLLoaderCompletionStatus> status); base::WeakPtr<UrlDownloadHandler::Delegate> delegate_;
diff --git a/content/browser/file_url_loader_factory.cc b/content/browser/file_url_loader_factory.cc index 9ff24ac..28b6cd8 100644 --- a/content/browser/file_url_loader_factory.cc +++ b/content/browser/file_url_loader_factory.cc
@@ -122,25 +122,27 @@ client.Bind(std::move(client_info)); if (!net::FileURLToFilePath(request.url, &path_)) { - client->OnComplete(network::URLLoaderStatus(net::ERR_FAILED)); + client->OnComplete(network::URLLoaderCompletionStatus(net::ERR_FAILED)); return; } base::File::Info info; if (!base::GetFileInfo(path_, &info) || !info.is_directory) { - client->OnComplete(network::URLLoaderStatus(net::ERR_FILE_NOT_FOUND)); + client->OnComplete( + network::URLLoaderCompletionStatus(net::ERR_FILE_NOT_FOUND)); return; } if (!GetContentClient()->browser()->IsFileAccessAllowed( path_, base::MakeAbsoluteFilePath(path_), profile_path)) { - client->OnComplete(network::URLLoaderStatus(net::ERR_ACCESS_DENIED)); + client->OnComplete( + network::URLLoaderCompletionStatus(net::ERR_ACCESS_DENIED)); return; } mojo::DataPipe pipe(kDefaultFileUrlPipeSize); if (!pipe.consumer_handle.is_valid()) { - client->OnComplete(network::URLLoaderStatus(net::ERR_FAILED)); + client->OnComplete(network::URLLoaderCompletionStatus(net::ERR_FAILED)); return; } @@ -253,7 +255,7 @@ completion_status = net::ERR_FAILED; } - client_->OnComplete(network::URLLoaderStatus(completion_status)); + client_->OnComplete(network::URLLoaderCompletionStatus(completion_status)); client_.reset(); MaybeDeleteSelf(); } @@ -321,19 +323,21 @@ base::FilePath path; if (!net::FileURLToFilePath(request.url, &path)) { - client->OnComplete(network::URLLoaderStatus(net::ERR_FAILED)); + client->OnComplete(network::URLLoaderCompletionStatus(net::ERR_FAILED)); return; } base::File::Info info; if (!base::GetFileInfo(path, &info)) { - client->OnComplete(network::URLLoaderStatus(net::ERR_FILE_NOT_FOUND)); + client->OnComplete( + network::URLLoaderCompletionStatus(net::ERR_FILE_NOT_FOUND)); return; } if (info.is_directory) { if (directory_loading_policy == DirectoryLoadingPolicy::kFail) { - client->OnComplete(network::URLLoaderStatus(net::ERR_FILE_NOT_FOUND)); + client->OnComplete( + network::URLLoaderCompletionStatus(net::ERR_FILE_NOT_FOUND)); return; } @@ -393,13 +397,14 @@ if (file_access_policy == FileAccessPolicy::kRestricted && !GetContentClient()->browser()->IsFileAccessAllowed( path, base::MakeAbsoluteFilePath(path), profile_path)) { - client->OnComplete(network::URLLoaderStatus(net::ERR_ACCESS_DENIED)); + client->OnComplete( + network::URLLoaderCompletionStatus(net::ERR_ACCESS_DENIED)); return; } mojo::DataPipe pipe(kDefaultFileUrlPipeSize); if (!pipe.consumer_handle.is_valid()) { - client->OnComplete(network::URLLoaderStatus(net::ERR_FAILED)); + client->OnComplete(network::URLLoaderCompletionStatus(net::ERR_FAILED)); return; } @@ -414,7 +419,7 @@ int initial_read_result = file.ReadAtCurrentPos(initial_read_buffer, net::kMaxBytesToSniff); if (initial_read_result < 0) { - client->OnComplete(network::URLLoaderStatus(net::ERR_FAILED)); + client->OnComplete(network::URLLoaderCompletionStatus(net::ERR_FAILED)); return; } size_t initial_read_size = static_cast<size_t>(initial_read_result); @@ -436,8 +441,8 @@ } if (fail) { - client->OnComplete( - network::URLLoaderStatus(net::ERR_REQUEST_RANGE_NOT_SATISFIABLE)); + client->OnComplete(network::URLLoaderCompletionStatus( + net::ERR_REQUEST_RANGE_NOT_SATISFIABLE)); return; } } @@ -513,9 +518,9 @@ void OnFileWritten(MojoResult result) { if (result == MOJO_RESULT_OK) - client_->OnComplete(network::URLLoaderStatus(net::OK)); + client_->OnComplete(network::URLLoaderCompletionStatus(net::OK)); else - client_->OnComplete(network::URLLoaderStatus(net::ERR_FAILED)); + client_->OnComplete(network::URLLoaderCompletionStatus(net::ERR_FAILED)); client_.reset(); MaybeDeleteSelf(); }
diff --git a/content/browser/histogram_internals_url_loader.cc b/content/browser/histogram_internals_url_loader.cc index 357783f7..b69269a3 100644 --- a/content/browser/histogram_internals_url_loader.cc +++ b/content/browser/histogram_internals_url_loader.cc
@@ -26,7 +26,7 @@ CHECK(mojo::common::BlockingCopyFromString(data, data_pipe.producer_handle)); client->OnStartLoadingResponseBody(std::move(data_pipe.consumer_handle)); - network::URLLoaderStatus status(net::OK); + network::URLLoaderCompletionStatus status(net::OK); status.encoded_data_length = data.size(); status.encoded_body_length = data.size(); client->OnComplete(status);
diff --git a/content/browser/loader/async_resource_handler.cc b/content/browser/loader/async_resource_handler.cc index e8c8ae9..5316de1 100644 --- a/content/browser/loader/async_resource_handler.cc +++ b/content/browser/loader/async_resource_handler.cc
@@ -29,7 +29,7 @@ #include "net/base/load_flags.h" #include "net/base/upload_progress.h" #include "net/url_request/redirect_info.h" -#include "services/network/public/cpp/url_loader_status.h" +#include "services/network/public/cpp/url_loader_completion_status.h" using base::TimeDelta; using base::TimeTicks; @@ -348,7 +348,7 @@ DCHECK(request_status.status() != net::URLRequestStatus::IO_PENDING); - network::URLLoaderStatus loader_status; + network::URLLoaderCompletionStatus loader_status; loader_status.error_code = error_code; loader_status.exists_in_cache = request()->response_info().was_cached; loader_status.completion_time = TimeTicks::Now();
diff --git a/content/browser/loader/async_resource_handler_unittest.cc b/content/browser/loader/async_resource_handler_unittest.cc index 5c660018..6e5fdc4 100644 --- a/content/browser/loader/async_resource_handler_unittest.cc +++ b/content/browser/loader/async_resource_handler_unittest.cc
@@ -268,7 +268,7 @@ ASSERT_EQ(ResourceMsg_RequestComplete::ID, messages[3]->type()); ResourceMsg_RequestComplete::Param completion_params; ResourceMsg_RequestComplete::Read(messages[3].get(), &completion_params); - network::URLLoaderStatus status = std::get<1>(completion_params); + network::URLLoaderCompletionStatus status = std::get<1>(completion_params); EXPECT_EQ(TotalReceivedBytes(kDataSize), status.encoded_data_length); EXPECT_EQ(kDataSize, status.encoded_body_length); @@ -296,7 +296,7 @@ ASSERT_EQ(ResourceMsg_RequestComplete::ID, messages[4]->type()); ResourceMsg_RequestComplete::Param completion_params; ResourceMsg_RequestComplete::Read(messages[4].get(), &completion_params); - network::URLLoaderStatus status = std::get<1>(completion_params); + network::URLLoaderCompletionStatus status = std::get<1>(completion_params); EXPECT_EQ(TotalReceivedBytes(kDataSize), status.encoded_data_length); EXPECT_EQ(kDataSize, status.encoded_body_length); }
diff --git a/content/browser/loader/mojo_async_resource_handler.cc b/content/browser/loader/mojo_async_resource_handler.cc index 9406661..6a0c5e0 100644 --- a/content/browser/loader/mojo_async_resource_handler.cc +++ b/content/browser/loader/mojo_async_resource_handler.cc
@@ -26,7 +26,7 @@ #include "net/base/mime_sniffer.h" #include "net/base/net_errors.h" #include "net/url_request/redirect_info.h" -#include "services/network/public/cpp/url_loader_status.h" +#include "services/network/public/cpp/url_loader_completion_status.h" namespace content { namespace { @@ -440,7 +440,7 @@ DCHECK_NE(request_status.status(), net::URLRequestStatus::IO_PENDING); - network::URLLoaderStatus loader_status; + network::URLLoaderCompletionStatus loader_status; loader_status.error_code = error_code; loader_status.exists_in_cache = request()->response_info().was_cached; loader_status.completion_time = base::TimeTicks::Now();
diff --git a/content/browser/loader/mojo_async_resource_handler_unittest.cc b/content/browser/loader/mojo_async_resource_handler_unittest.cc index 0e8e8fa..4557913 100644 --- a/content/browser/loader/mojo_async_resource_handler_unittest.cc +++ b/content/browser/loader/mojo_async_resource_handler_unittest.cc
@@ -54,7 +54,7 @@ #include "net/url_request/url_request_context.h" #include "net/url_request/url_request_status.h" #include "net/url_request/url_request_test_util.h" -#include "services/network/public/cpp/url_loader_status.h" +#include "services/network/public/cpp/url_loader_completion_status.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/base/page_transition_types.h" @@ -617,11 +617,11 @@ url_loader_client_.RunUntilComplete(); EXPECT_TRUE(url_loader_client_.has_received_completion()); - EXPECT_EQ(net::OK, url_loader_client_.status().error_code); - EXPECT_LE(now1, url_loader_client_.status().completion_time); - EXPECT_LE(url_loader_client_.status().completion_time, now2); + EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); + EXPECT_LE(now1, url_loader_client_.completion_status().completion_time); + EXPECT_LE(url_loader_client_.completion_status().completion_time, now2); EXPECT_EQ(request_->GetTotalReceivedBytes(), - url_loader_client_.status().encoded_data_length); + url_loader_client_.completion_status().encoded_data_length); } // This test case sets different status values from OnResponseCompleted. @@ -647,11 +647,12 @@ url_loader_client_.RunUntilComplete(); EXPECT_TRUE(url_loader_client_.has_received_completion()); - EXPECT_EQ(net::ERR_ABORTED, url_loader_client_.status().error_code); - EXPECT_LE(now1, url_loader_client_.status().completion_time); - EXPECT_LE(url_loader_client_.status().completion_time, now2); + EXPECT_EQ(net::ERR_ABORTED, + url_loader_client_.completion_status().error_code); + EXPECT_LE(now1, url_loader_client_.completion_status().completion_time); + EXPECT_LE(url_loader_client_.completion_status().completion_time, now2); EXPECT_EQ(request_->GetTotalReceivedBytes(), - url_loader_client_.status().encoded_data_length); + url_loader_client_.completion_status().encoded_data_length); } TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompletedWithCanceledTimedOut) { @@ -664,7 +665,8 @@ url_loader_client_.RunUntilComplete(); EXPECT_TRUE(url_loader_client_.has_received_completion()); - EXPECT_EQ(net::ERR_TIMED_OUT, url_loader_client_.status().error_code); + EXPECT_EQ(net::ERR_TIMED_OUT, + url_loader_client_.completion_status().error_code); } TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompletedWithFailedTimedOut) { @@ -677,7 +679,8 @@ url_loader_client_.RunUntilComplete(); EXPECT_TRUE(url_loader_client_.has_received_completion()); - EXPECT_EQ(net::ERR_TIMED_OUT, url_loader_client_.status().error_code); + EXPECT_EQ(net::ERR_TIMED_OUT, + url_loader_client_.completion_status().error_code); } TEST_F(MojoAsyncResourceHandlerTest, ResponseCompletionShouldCloseDataPipe) { @@ -695,7 +698,7 @@ url_loader_client_.RunUntilComplete(); EXPECT_TRUE(url_loader_client_.has_received_completion()); - EXPECT_EQ(net::OK, url_loader_client_.status().error_code); + EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); while (true) { char buffer[16]; @@ -727,7 +730,7 @@ url_loader_client_.RunUntilComplete(); EXPECT_TRUE(url_loader_client_.has_received_completion()); - EXPECT_EQ(net::ERR_FAILED, url_loader_client_.status().error_code); + EXPECT_EQ(net::ERR_FAILED, url_loader_client_.completion_status().error_code); std::string actual; while (true) { @@ -1153,7 +1156,8 @@ ASSERT_FALSE(url_loader_client_.has_received_completion()); url_loader_client_.RunUntilComplete(); - EXPECT_EQ(net::ERR_ABORTED, url_loader_client_.status().error_code); + EXPECT_EQ(net::ERR_ABORTED, + url_loader_client_.completion_status().error_code); while (true) { char buffer[16]; @@ -1226,7 +1230,7 @@ ASSERT_TRUE(url_loader_client_.has_received_response()); ASSERT_TRUE(url_loader_client_.has_received_completion()); - EXPECT_EQ(net::OK, url_loader_client_.status().error_code); + EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); } // Test the case where th other process tells the ResourceHandler to follow a @@ -1267,7 +1271,7 @@ ASSERT_FALSE(url_loader_client_.has_received_completion()); url_loader_client_.RunUntilComplete(); - EXPECT_EQ(net::OK, url_loader_client_.status().error_code); + EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); std::string body; while (true) { @@ -1317,7 +1321,7 @@ ASSERT_FALSE(url_loader_client_.has_received_completion()); url_loader_client_.RunUntilComplete(); - EXPECT_EQ(net::OK, url_loader_client_.status().error_code); + EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); std::string body; while (true) {
diff --git a/content/browser/loader/navigation_url_loader.h b/content/browser/loader/navigation_url_loader.h index 75a0cec..bb784aa 100644 --- a/content/browser/loader/navigation_url_loader.h +++ b/content/browser/loader/navigation_url_loader.h
@@ -12,7 +12,7 @@ #include "base/macros.h" #include "base/optional.h" #include "content/common/content_export.h" -#include "services/network/public/cpp/url_loader_status.h" +#include "services/network/public/cpp/url_loader_completion_status.h" class GURL; @@ -68,11 +68,11 @@ // network service is enabled. Args: the initial resource request, // the URLLoader for sending the request, url chain, optional completion // status if it has already been received. - using NavigationInterceptionCB = - base::OnceCallback<void(std::unique_ptr<ResourceRequest>, - std::unique_ptr<ThrottlingURLLoader>, - std::vector<GURL>, - base::Optional<network::URLLoaderStatus>)>; + using NavigationInterceptionCB = base::OnceCallback<void( + std::unique_ptr<ResourceRequest>, + std::unique_ptr<ThrottlingURLLoader>, + std::vector<GURL>, + base::Optional<network::URLLoaderCompletionStatus>)>; // This method is called to intercept the url response. Caller is responsible // for handling the URLLoader later on. The callback should be called on the
diff --git a/content/browser/loader/navigation_url_loader_network_service.cc b/content/browser/loader/navigation_url_loader_network_service.cc index 3e4eae2..00c8d6d8 100644 --- a/content/browser/loader/navigation_url_loader_network_service.cc +++ b/content/browser/loader/navigation_url_loader_network_service.cc
@@ -386,7 +386,8 @@ void OnReceiveRedirect(const net::RedirectInfo& redirect_info, const ResourceResponseHead& head) override { if (--redirect_limit_ == 0) { - OnComplete(network::URLLoaderStatus(net::ERR_TOO_MANY_REDIRECTS)); + OnComplete( + network::URLLoaderCompletionStatus(net::ERR_TOO_MANY_REDIRECTS)); return; } @@ -425,7 +426,7 @@ owner_, base::Passed(&body))); } - void OnComplete(const network::URLLoaderStatus& status) override { + void OnComplete(const network::URLLoaderCompletionStatus& status) override { if (status.error_code != net::OK && !received_response_) { // If the default loader (network) was used to handle the URL load // request we need to see if the handlers want to potentially create a @@ -508,7 +509,7 @@ // the case that the response is intercepted by download, and OnComplete() is // already called while we are transferring the |url_loader_| and response // body to download code. - base::Optional<network::URLLoaderStatus> status_; + base::Optional<network::URLLoaderCompletionStatus> status_; DISALLOW_COPY_AND_ASSIGN(URLLoaderRequestController); }; @@ -689,7 +690,7 @@ } void NavigationURLLoaderNetworkService::OnComplete( - const network::URLLoaderStatus& status) { + const network::URLLoaderCompletionStatus& status) { if (status.error_code == net::OK) return;
diff --git a/content/browser/loader/navigation_url_loader_network_service.h b/content/browser/loader/navigation_url_loader_network_service.h index f60c5c8..a5ddfedf 100644 --- a/content/browser/loader/navigation_url_loader_network_service.h +++ b/content/browser/loader/navigation_url_loader_network_service.h
@@ -53,7 +53,7 @@ void OnReceiveRedirect(const net::RedirectInfo& redirect_info, scoped_refptr<ResourceResponse> response); void OnStartLoadingResponseBody(mojo::ScopedDataPipeConsumerHandle body); - void OnComplete(const network::URLLoaderStatus& status); + void OnComplete(const network::URLLoaderCompletionStatus& status); private: class URLLoaderRequestController;
diff --git a/content/browser/loader/resource_dispatcher_host_impl.cc b/content/browser/loader/resource_dispatcher_host_impl.cc index 54b5889..ced877e 100644 --- a/content/browser/loader/resource_dispatcher_host_impl.cc +++ b/content/browser/loader/resource_dispatcher_host_impl.cc
@@ -114,7 +114,7 @@ #include "net/url_request/url_request_context_getter.h" #include "net/url_request/url_request_job_factory.h" #include "ppapi/features/features.h" -#include "services/network/public/cpp/url_loader_status.h" +#include "services/network/public/cpp/url_loader_completion_status.h" #include "storage/browser/blob/blob_data_handle.h" #include "storage/browser/blob/blob_storage_context.h" #include "storage/browser/blob/blob_url_request_job_factory.h" @@ -182,7 +182,7 @@ sync_result_handler.Run(&result); } else { // Tell the renderer that this request was disallowed. - network::URLLoaderStatus status; + network::URLLoaderCompletionStatus status; status.error_code = net::ERR_ABORTED; status.exists_in_cache = false; // No security info needed, connection not established.
diff --git a/content/browser/loader/url_loader_factory_impl_unittest.cc b/content/browser/loader/url_loader_factory_impl_unittest.cc index 6af8835..63314d6 100644 --- a/content/browser/loader/url_loader_factory_impl_unittest.cc +++ b/content/browser/loader/url_loader_factory_impl_unittest.cc
@@ -51,7 +51,7 @@ #include "net/test/url_request/url_request_slow_download_job.h" #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" #include "net/url_request/url_request_filter.h" -#include "services/network/public/cpp/url_loader_status.h" +#include "services/network/public/cpp/url_loader_completion_status.h" #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h" #include "url/origin.h" @@ -196,7 +196,7 @@ client.response_head().headers->GetNormalizedHeader("content-type", &content_type); EXPECT_EQ("text/html", content_type); - EXPECT_EQ(0, client.status().error_code); + EXPECT_EQ(0, client.completion_status().error_code); std::string contents; while (true) { @@ -217,13 +217,13 @@ EXPECT_EQ(expected, contents); EXPECT_EQ(static_cast<int64_t>(expected.size()) + client.response_head().encoded_data_length, - client.status().encoded_data_length); + client.completion_status().encoded_data_length); EXPECT_EQ(static_cast<int64_t>(expected.size()), - client.status().encoded_body_length); + client.completion_status().encoded_body_length); // OnTransferSizeUpdated is not dispatched as report_raw_headers is not set. EXPECT_EQ(0, client.body_transfer_size()); EXPECT_GT(client.response_head().encoded_data_length, 0); - EXPECT_GT(client.status().encoded_data_length, 0); + EXPECT_GT(client.completion_status().encoded_data_length, 0); } TEST_P(URLLoaderFactoryImplTest, GetFailedResponse) { @@ -250,9 +250,9 @@ ASSERT_FALSE(client.has_received_response()); ASSERT_FALSE(client.response_body().is_valid()); - EXPECT_EQ(net::ERR_TIMED_OUT, client.status().error_code); - EXPECT_EQ(0, client.status().encoded_data_length); - EXPECT_EQ(0, client.status().encoded_body_length); + EXPECT_EQ(net::ERR_TIMED_OUT, client.completion_status().error_code); + EXPECT_EQ(0, client.completion_status().encoded_data_length); + EXPECT_EQ(0, client.completion_status().encoded_body_length); } // In this case, the loading fails after receiving a response. @@ -280,9 +280,9 @@ ASSERT_FALSE(client.has_received_response()); ASSERT_FALSE(client.response_body().is_valid()); - EXPECT_EQ(net::ERR_TIMED_OUT, client.status().error_code); - EXPECT_GT(client.status().encoded_data_length, 0); - EXPECT_EQ(0, client.status().encoded_body_length); + EXPECT_EQ(net::ERR_TIMED_OUT, client.completion_status().error_code); + EXPECT_GT(client.completion_status().encoded_data_length, 0); + EXPECT_EQ(0, client.completion_status().encoded_body_length); } // This test tests a case where resource loading is cancelled before started. @@ -308,7 +308,7 @@ ASSERT_FALSE(client.has_received_response()); ASSERT_FALSE(client.response_body().is_valid()); - EXPECT_EQ(net::ERR_ABORTED, client.status().error_code); + EXPECT_EQ(net::ERR_ABORTED, client.completion_status().error_code); } // This test tests a case where resource loading is cancelled before started. @@ -337,7 +337,7 @@ ASSERT_FALSE(client.has_received_response()); ASSERT_FALSE(client.response_body().is_valid()); - EXPECT_EQ(net::ERR_ABORTED, client.status().error_code); + EXPECT_EQ(net::ERR_ABORTED, client.completion_status().error_code); } TEST_P(URLLoaderFactoryImplTest, DownloadToFile) { @@ -387,7 +387,7 @@ client.response_head().headers->GetNormalizedHeader("content-type", &content_type); EXPECT_EQ("text/html", content_type); - EXPECT_EQ(0, client.status().error_code); + EXPECT_EQ(0, client.completion_status().error_code); std::string contents; base::ReadFileToString(client.response_head().download_file_path, &contents); @@ -403,9 +403,9 @@ EXPECT_EQ(expected, contents); EXPECT_EQ(static_cast<int64_t>(expected.size()) + client.response_head().encoded_data_length, - client.status().encoded_data_length); + client.completion_status().encoded_data_length); EXPECT_EQ(static_cast<int64_t>(expected.size()), - client.status().encoded_body_length); + client.completion_status().encoded_body_length); } TEST_P(URLLoaderFactoryImplTest, DownloadToFileFailure) { @@ -464,7 +464,7 @@ ASSERT_TRUE(client.has_received_completion()); EXPECT_EQ(200, client.response_head().headers->response_code()); - EXPECT_EQ(net::ERR_ABORTED, client.status().error_code); + EXPECT_EQ(net::ERR_ABORTED, client.completion_status().error_code); } TEST_P(URLLoaderFactoryImplTest, OnTransferSizeUpdated) { @@ -514,15 +514,16 @@ &expected_encoded_body); EXPECT_GT(client.response_head().encoded_data_length, 0); - EXPECT_GT(client.status().encoded_data_length, 0); + EXPECT_GT(client.completion_status().encoded_data_length, 0); EXPECT_EQ(static_cast<int64_t>(expected_encoded_body.size()), client.body_transfer_size()); EXPECT_EQ(200, client.response_head().headers->response_code()); EXPECT_EQ( client.response_head().encoded_data_length + client.body_transfer_size(), - client.status().encoded_data_length); + client.completion_status().encoded_data_length); EXPECT_NE(client.body_transfer_size(), static_cast<int64_t>(contents.size())); - EXPECT_EQ(client.body_transfer_size(), client.status().encoded_body_length); + EXPECT_EQ(client.body_transfer_size(), + client.completion_status().encoded_body_length); EXPECT_EQ(contents, "Hello World!\n"); }
diff --git a/content/browser/service_worker/service_worker_fetch_dispatcher.cc b/content/browser/service_worker/service_worker_fetch_dispatcher.cc index 8e79851a..a9f970d 100644 --- a/content/browser/service_worker/service_worker_fetch_dispatcher.cc +++ b/content/browser/service_worker/service_worker_fetch_dispatcher.cc
@@ -117,7 +117,7 @@ } void NotifyNavigationPreloadCompletedOnUI( - const network::URLLoaderStatus& status, + const network::URLLoaderCompletionStatus& status, const std::pair<int, int>& worker_id, const std::string& request_id) { DCHECK_CURRENTLY_ON(BrowserThread::UI); @@ -145,7 +145,7 @@ ~DelegatingURLLoaderClient() override { if (!completed_) { // Let the service worker know that the request has been canceled. - network::URLLoaderStatus status; + network::URLLoaderCompletionStatus status; status.error_code = net::ERR_ABORTED; client_->OnComplete(status); AddDevToolsCallback( @@ -193,7 +193,7 @@ client_->OnReceiveRedirect(redirect_info, head); AddDevToolsCallback( base::Bind(&NotifyNavigationPreloadResponseReceivedOnUI, url_, head)); - network::URLLoaderStatus status; + network::URLLoaderCompletionStatus status; AddDevToolsCallback( base::Bind(&NotifyNavigationPreloadCompletedOnUI, status)); } @@ -201,7 +201,7 @@ mojo::ScopedDataPipeConsumerHandle body) override { client_->OnStartLoadingResponseBody(std::move(body)); } - void OnComplete(const network::URLLoaderStatus& status) override { + void OnComplete(const network::URLLoaderCompletionStatus& status) override { if (completed_) return; completed_ = true;
diff --git a/content/browser/service_worker/service_worker_script_url_loader.cc b/content/browser/service_worker/service_worker_script_url_loader.cc index 7758758..6b668c7 100644 --- a/content/browser/service_worker/service_worker_script_url_loader.cc +++ b/content/browser/service_worker/service_worker_script_url_loader.cc
@@ -128,7 +128,7 @@ const base::Optional<net::SSLInfo>& ssl_info, mojom::DownloadedTempFilePtr downloaded_file) { if (!version_->context() || version_->is_redundant()) { - CommitCompleted(network::URLLoaderStatus(net::ERR_FAILED)); + CommitCompleted(network::URLLoaderCompletionStatus(net::ERR_FAILED)); return; } @@ -152,7 +152,8 @@ // Non-2XX HTTP status code is handled as an error. // TODO(nhiroki): Show an error message equivalent to kBadHTTPResponseError // in service_worker_write_to_cache_job.cc. - CommitCompleted(network::URLLoaderStatus(net::ERR_INVALID_RESPONSE)); + CommitCompleted( + network::URLLoaderCompletionStatus(net::ERR_INVALID_RESPONSE)); return; } @@ -163,7 +164,8 @@ if (net::IsCertStatusError(response_head.cert_status)) { // TODO(nhiroki): Show an error message equivalent to kSSLError in // service_worker_write_to_cache_job.cc. - CommitCompleted(network::URLLoaderStatus(net::ERR_INSECURE_RESPONSE)); + CommitCompleted( + network::URLLoaderCompletionStatus(net::ERR_INSECURE_RESPONSE)); return; } @@ -171,7 +173,8 @@ if (!blink::IsSupportedJavascriptMimeType(response_head.mime_type)) { // TODO(nhiroki): Show an error message equivalent to kNoMIMEError or // kBadMIMEError in service_worker_write_to_cache_job.cc. - CommitCompleted(network::URLLoaderStatus(net::ERR_INSECURE_RESPONSE)); + CommitCompleted( + network::URLLoaderCompletionStatus(net::ERR_INSECURE_RESPONSE)); return; } @@ -186,7 +189,8 @@ version_->scope(), request_url_, has_header ? &service_worker_allowed : nullptr, &error_message)) { // TODO(nhiroki): Report |error_message|. - CommitCompleted(network::URLLoaderStatus(net::ERR_INSECURE_RESPONSE)); + CommitCompleted( + network::URLLoaderCompletionStatus(net::ERR_INSECURE_RESPONSE)); return; } @@ -210,7 +214,7 @@ // // TODO(nhiroki): Show an error message equivalent to kRedirectError in // service_worker_write_to_cache_job.cc. - CommitCompleted(network::URLLoaderStatus(net::ERR_UNSAFE_REDIRECT)); + CommitCompleted(network::URLLoaderCompletionStatus(net::ERR_UNSAFE_REDIRECT)); } void ServiceWorkerScriptURLLoader::OnDataDownloaded(int64_t data_len, @@ -242,7 +246,7 @@ mojo::ScopedDataPipeConsumerHandle client_consumer; if (mojo::CreateDataPipe(nullptr, &client_producer_, &client_consumer) != MOJO_RESULT_OK) { - CommitCompleted(network::URLLoaderStatus(net::ERR_FAILED)); + CommitCompleted(network::URLLoaderCompletionStatus(net::ERR_FAILED)); return; } @@ -254,7 +258,7 @@ } void ServiceWorkerScriptURLLoader::OnComplete( - const network::URLLoaderStatus& status) { + const network::URLLoaderCompletionStatus& status) { if (status.error_code != net::OK) { CommitCompleted(status); return; @@ -271,7 +275,7 @@ // storage. return; case State::kWroteData: - CommitCompleted(network::URLLoaderStatus(net::OK)); + CommitCompleted(network::URLLoaderCompletionStatus(net::OK)); return; } NOTREACHED() << static_cast<int>(state_); @@ -320,7 +324,7 @@ void ServiceWorkerScriptURLLoader::OnWriteHeadersComplete(net::Error error) { DCHECK_NE(net::ERR_IO_PENDING, error); if (error != net::OK) { - CommitCompleted(network::URLLoaderStatus(error)); + CommitCompleted(network::URLLoaderCompletionStatus(error)); return; } AdvanceState(State::kWroteHeaders); @@ -363,7 +367,7 @@ // notified via OnComplete(). AdvanceState(State::kWroteData); if (network_load_completed_) - CommitCompleted(network::URLLoaderStatus(net::OK)); + CommitCompleted(network::URLLoaderCompletionStatus(net::OK)); return; case MOJO_RESULT_SHOULD_WAIT: network_watcher_.ArmOrNotify(); @@ -387,7 +391,7 @@ case MOJO_RESULT_OK: break; case MOJO_RESULT_FAILED_PRECONDITION: - CommitCompleted(network::URLLoaderStatus(net::ERR_FAILED)); + CommitCompleted(network::URLLoaderCompletionStatus(net::ERR_FAILED)); return; case MOJO_RESULT_SHOULD_WAIT: // No data was written to |client_producer_| because the pipe was full. @@ -423,7 +427,7 @@ net::Error error) { DCHECK_NE(net::ERR_IO_PENDING, error); if (error != net::OK) { - CommitCompleted(network::URLLoaderStatus(error)); + CommitCompleted(network::URLLoaderCompletionStatus(error)); return; } DCHECK(pending_buffer); @@ -434,7 +438,7 @@ } void ServiceWorkerScriptURLLoader::CommitCompleted( - const network::URLLoaderStatus& status) { + const network::URLLoaderCompletionStatus& status) { AdvanceState(State::kCompleted); net::Error error_code = static_cast<net::Error>(status.error_code); int bytes_written = -1;
diff --git a/content/browser/service_worker/service_worker_script_url_loader.h b/content/browser/service_worker/service_worker_script_url_loader.h index db3fd6b..f7b9c60 100644 --- a/content/browser/service_worker/service_worker_script_url_loader.h +++ b/content/browser/service_worker/service_worker_script_url_loader.h
@@ -80,7 +80,7 @@ void OnTransferSizeUpdated(int32_t transfer_size_diff) override; void OnStartLoadingResponseBody( mojo::ScopedDataPipeConsumerHandle body) override; - void OnComplete(const network::URLLoaderStatus& status) override; + void OnComplete(const network::URLLoaderCompletionStatus& status) override; // Buffer size for reading script data from network. const static uint32_t kReadBufferSize; @@ -117,7 +117,7 @@ // This is the last method that is called on this class. Notifies the final // result to |client_| and clears all mojo connections etc. - void CommitCompleted(const network::URLLoaderStatus& status); + void CommitCompleted(const network::URLLoaderCompletionStatus& status); const GURL request_url_;
diff --git a/content/browser/service_worker/service_worker_script_url_loader_unittest.cc b/content/browser/service_worker/service_worker_script_url_loader_unittest.cc index c2297a35..def50b02 100644 --- a/content/browser/service_worker/service_worker_script_url_loader_unittest.cc +++ b/content/browser/service_worker/service_worker_script_url_loader_unittest.cc
@@ -22,7 +22,7 @@ #include "net/traffic_annotation/network_traffic_annotation.h" #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" #include "net/url_request/redirect_info.h" -#include "services/network/public/cpp/url_loader_status.h" +#include "services/network/public/cpp/url_loader_completion_status.h" #include "third_party/WebKit/public/platform/modules/serviceworker/service_worker_registration.mojom.h" namespace content { @@ -110,7 +110,7 @@ ASSERT_EQ(MOJO_RESULT_OK, result); client->OnStartLoadingResponseBody(std::move(data_pipe.consumer_handle)); - network::URLLoaderStatus status; + network::URLLoaderCompletionStatus status; status.error_code = net::OK; client->OnComplete(status); } @@ -267,7 +267,7 @@ SetUpRegistration(kScriptURL); DoRequest(kScriptURL); client_.RunUntilComplete(); - EXPECT_EQ(net::OK, client_.status().error_code); + EXPECT_EQ(net::OK, client_.completion_status().error_code); // The client should have received the response. EXPECT_TRUE(client_.has_received_response()); @@ -291,7 +291,7 @@ SetUpRegistration(kScriptURL); DoRequest(kScriptURL); client_.RunUntilComplete(); - EXPECT_EQ(net::OK, client_.status().error_code); + EXPECT_EQ(net::OK, client_.completion_status().error_code); // The client should have received the response. EXPECT_TRUE(client_.has_received_response()); @@ -321,7 +321,7 @@ SetUpRegistration(kScriptURL); DoRequest(kScriptURL); client_.RunUntilComplete(); - EXPECT_EQ(net::OK, client_.status().error_code); + EXPECT_EQ(net::OK, client_.completion_status().error_code); // The client should have received the response. EXPECT_TRUE(client_.has_received_response()); @@ -345,7 +345,7 @@ client_.RunUntilComplete(); // The request should be failed because of the 404 response. - EXPECT_EQ(net::ERR_INVALID_RESPONSE, client_.status().error_code); + EXPECT_EQ(net::ERR_INVALID_RESPONSE, client_.completion_status().error_code); EXPECT_FALSE(client_.has_received_response()); // The response shouldn't be stored in the storage. @@ -363,7 +363,7 @@ client_.RunUntilComplete(); // The request should be failed because of the redirected response. - EXPECT_EQ(net::ERR_UNSAFE_REDIRECT, client_.status().error_code); + EXPECT_EQ(net::ERR_UNSAFE_REDIRECT, client_.completion_status().error_code); EXPECT_FALSE(client_.has_received_response()); // The response shouldn't be stored in the storage. @@ -383,7 +383,7 @@ // The request should be failed because of the response with the certificate // error. - EXPECT_EQ(net::ERR_INSECURE_RESPONSE, client_.status().error_code); + EXPECT_EQ(net::ERR_INSECURE_RESPONSE, client_.completion_status().error_code); EXPECT_FALSE(client_.has_received_response()); // The response shouldn't be stored in the storage. @@ -400,7 +400,7 @@ client_.RunUntilComplete(); // The request should be failed because of the response with no MIME type. - EXPECT_EQ(net::ERR_INSECURE_RESPONSE, client_.status().error_code); + EXPECT_EQ(net::ERR_INSECURE_RESPONSE, client_.completion_status().error_code); EXPECT_FALSE(client_.has_received_response()); // The response shouldn't be stored in the storage. @@ -419,7 +419,7 @@ // The request should be failed because of the response with the bad MIME // type. - EXPECT_EQ(net::ERR_INSECURE_RESPONSE, client_.status().error_code); + EXPECT_EQ(net::ERR_INSECURE_RESPONSE, client_.completion_status().error_code); EXPECT_FALSE(client_.has_received_response()); // The response shouldn't be stored in the storage. @@ -440,7 +440,7 @@ SetUpRegistration(kScriptURL, kScope); DoRequest(kScriptURL); client_.RunUntilComplete(); - EXPECT_EQ(net::OK, client_.status().error_code); + EXPECT_EQ(net::OK, client_.completion_status().error_code); // The client should have received the response. EXPECT_TRUE(client_.has_received_response()); @@ -469,7 +469,7 @@ client_.RunUntilComplete(); // The request should be failed because the scope is not allowed. - EXPECT_EQ(net::ERR_INSECURE_RESPONSE, client_.status().error_code); + EXPECT_EQ(net::ERR_INSECURE_RESPONSE, client_.completion_status().error_code); EXPECT_FALSE(client_.has_received_response()); // The response shouldn't be stored in the storage. @@ -488,7 +488,7 @@ client_.RunUntilComplete(); // The request should be aborted. - EXPECT_EQ(net::ERR_FAILED, client_.status().error_code); + EXPECT_EQ(net::ERR_FAILED, client_.completion_status().error_code); EXPECT_FALSE(client_.has_received_response()); // The response shouldn't be stored in the storage.
diff --git a/content/browser/service_worker/service_worker_url_loader_job.cc b/content/browser/service_worker/service_worker_url_loader_job.cc index adfb08cb..06be04e 100644 --- a/content/browser/service_worker/service_worker_url_loader_job.cc +++ b/content/browser/service_worker/service_worker_url_loader_job.cc
@@ -135,7 +135,8 @@ fetch_dispatcher_.reset(); stream_waiter_.reset(); - url_loader_client_->OnComplete(network::URLLoaderStatus(net::ERR_ABORTED)); + url_loader_client_->OnComplete( + network::URLLoaderCompletionStatus(net::ERR_ABORTED)); url_loader_client_.reset(); } @@ -194,7 +195,8 @@ // |stream_waiter_| calls this when done. stream_waiter_.reset(); - url_loader_client_->OnComplete(network::URLLoaderStatus(error_code)); + url_loader_client_->OnComplete( + network::URLLoaderCompletionStatus(error_code)); } void ServiceWorkerURLLoaderJob::ReturnNetworkError() { @@ -408,7 +410,7 @@ } void ServiceWorkerURLLoaderJob::OnComplete( - const network::URLLoaderStatus& status) { + const network::URLLoaderCompletionStatus& status) { DCHECK_EQ(Status::kSentHeader, status_); DCHECK(url_loader_client_.is_bound()); status_ = Status::kCompleted;
diff --git a/content/browser/service_worker/service_worker_url_loader_job.h b/content/browser/service_worker/service_worker_url_loader_job.h index e8f45ad..2502e16 100644 --- a/content/browser/service_worker/service_worker_url_loader_job.h +++ b/content/browser/service_worker/service_worker_url_loader_job.h
@@ -155,7 +155,7 @@ void OnTransferSizeUpdated(int32_t transfer_size_diff) override; void OnStartLoadingResponseBody( mojo::ScopedDataPipeConsumerHandle body) override; - void OnComplete(const network::URLLoaderStatus& status) override; + void OnComplete(const network::URLLoaderCompletionStatus& status) override; ResponseType response_type_ = ResponseType::NOT_DETERMINED; LoaderCallback loader_callback_;
diff --git a/content/browser/service_worker/service_worker_url_loader_job_unittest.cc b/content/browser/service_worker/service_worker_url_loader_job_unittest.cc index 27228076..6d4d34bc3 100644 --- a/content/browser/service_worker/service_worker_url_loader_job_unittest.cc +++ b/content/browser/service_worker/service_worker_url_loader_job_unittest.cc
@@ -93,7 +93,7 @@ // We could call OnResponseStream() here, but for simplicity, don't do // anything until OnComplete(). } - void OnComplete(const network::URLLoaderStatus& status) override { + void OnComplete(const network::URLLoaderCompletionStatus& status) override { blink::mojom::ServiceWorkerStreamCallbackPtr stream_callback; auto stream_handle = blink::mojom::ServiceWorkerStreamHandle::New(); stream_handle->callback_request = mojo::MakeRequest(&stream_callback); @@ -183,7 +183,7 @@ MOJO_WRITE_DATA_FLAG_ALL_OR_NONE); client->OnStartLoadingResponseBody(std::move(data_pipe.consumer_handle)); - network::URLLoaderStatus status; + network::URLLoaderCompletionStatus status; status.error_code = net::OK; client->OnComplete(status); } @@ -626,7 +626,7 @@ EXPECT_EQ(JobResult::kHandledRequest, result); client_.RunUntilComplete(); - EXPECT_EQ(net::OK, client_.status().error_code); + EXPECT_EQ(net::OK, client_.completion_status().error_code); const ResourceResponseHead& info = client_.response_head(); EXPECT_EQ(200, info.headers->response_code()); ExpectResponseInfo(info, *CreateResponseInfoFromServiceWorker()); @@ -641,7 +641,7 @@ EXPECT_EQ(JobResult::kHandledRequest, result); client_.RunUntilComplete(); - EXPECT_EQ(net::ERR_FAILED, client_.status().error_code); + EXPECT_EQ(net::ERR_FAILED, client_.completion_status().error_code); } // Test that the request body is passed to the fetch event. @@ -739,7 +739,7 @@ data_pipe.producer_handle.reset(); client_.RunUntilComplete(); - EXPECT_EQ(net::OK, client_.status().error_code); + EXPECT_EQ(net::OK, client_.completion_status().error_code); // Test the body. std::string response; @@ -777,7 +777,7 @@ data_pipe.producer_handle.reset(); client_.RunUntilComplete(); - EXPECT_EQ(net::ERR_ABORTED, client_.status().error_code); + EXPECT_EQ(net::ERR_ABORTED, client_.completion_status().error_code); // Test the body. std::string response; @@ -828,7 +828,7 @@ client_.RunUntilComplete(); EXPECT_FALSE(data_pipe.consumer_handle.is_valid()); - EXPECT_EQ(net::ERR_ABORTED, client_.status().error_code); + EXPECT_EQ(net::ERR_ABORTED, client_.completion_status().error_code); } // Test when the service worker responds with network fallback. @@ -854,7 +854,7 @@ EXPECT_EQ(JobResult::kHandledRequest, result); client_.RunUntilComplete(); - EXPECT_EQ(net::ERR_FAILED, client_.status().error_code); + EXPECT_EQ(net::ERR_FAILED, client_.completion_status().error_code); } // Test when dispatching the fetch event to the service worker failed. @@ -923,7 +923,7 @@ ASSERT_EQ(JobResult::kHandledRequest, result); client_.RunUntilComplete(); - EXPECT_EQ(net::OK, client_.status().error_code); + EXPECT_EQ(net::OK, client_.completion_status().error_code); const ResourceResponseHead& info = client_.response_head(); EXPECT_EQ(200, info.headers->response_code());
diff --git a/content/browser/site_per_process_browsertest.cc b/content/browser/site_per_process_browsertest.cc index 4cab8b1..4ece6a3 100644 --- a/content/browser/site_per_process_browsertest.cc +++ b/content/browser/site_per_process_browsertest.cc
@@ -2881,7 +2881,7 @@ class FailingURLLoaderImpl : public mojom::URLLoader { public: explicit FailingURLLoaderImpl(mojom::URLLoaderClientPtr client) { - network::URLLoaderStatus status; + network::URLLoaderCompletionStatus status; status.error_code = net::ERR_NOT_IMPLEMENTED; client->OnComplete(status); }
diff --git a/content/browser/webui/network_error_url_loader.cc b/content/browser/webui/network_error_url_loader.cc index ae4697a9..5771f7a 100644 --- a/content/browser/webui/network_error_url_loader.cc +++ b/content/browser/webui/network_error_url_loader.cc
@@ -29,7 +29,7 @@ } } - network::URLLoaderStatus status; + network::URLLoaderCompletionStatus status; status.error_code = net_error; client->OnComplete(status); }
diff --git a/content/browser/webui/web_ui_url_loader_factory.cc b/content/browser/webui/web_ui_url_loader_factory.cc index 082c4a6..b2d97832 100644 --- a/content/browser/webui/web_ui_url_loader_factory.cc +++ b/content/browser/webui/web_ui_url_loader_factory.cc
@@ -48,7 +48,7 @@ mojom::URLLoaderClientPtr client; client.Bind(std::move(client_info)); - network::URLLoaderStatus status; + network::URLLoaderCompletionStatus status; status.error_code = error_code; client->OnComplete(status); } @@ -112,7 +112,7 @@ CHECK_EQ(result, MOJO_RESULT_OK); client->OnStartLoadingResponseBody(std::move(data_pipe.consumer_handle)); - network::URLLoaderStatus status(net::OK); + network::URLLoaderCompletionStatus status(net::OK); status.encoded_data_length = output_size; status.encoded_body_length = output_size; client->OnComplete(status); @@ -237,7 +237,7 @@ if (request.url.scheme() != scheme_) { ReceivedBadMessage(render_frame_host_->GetProcess(), bad_message::WEBUI_BAD_SCHEME_ACCESS); - client->OnComplete(network::URLLoaderStatus(net::ERR_FAILED)); + client->OnComplete(network::URLLoaderCompletionStatus(net::ERR_FAILED)); return; }
diff --git a/content/common/resource_messages.h b/content/common/resource_messages.h index ea29b50a..a581a12 100644 --- a/content/common/resource_messages.h +++ b/content/common/resource_messages.h
@@ -30,7 +30,7 @@ #include "net/traffic_annotation/network_traffic_annotation.h" #include "net/url_request/redirect_info.h" #include "services/network/public/cpp/cors_error_status.h" -#include "services/network/public/cpp/url_loader_status.h" +#include "services/network/public/cpp/url_loader_completion_status.h" #include "services/network/public/interfaces/fetch_api.mojom.h" #include "third_party/WebKit/public/platform/WebMixedContentContextType.h" @@ -300,7 +300,7 @@ IPC_STRUCT_TRAITS_MEMBER(related_response_headers) IPC_STRUCT_TRAITS_END() -IPC_STRUCT_TRAITS_BEGIN(network::URLLoaderStatus) +IPC_STRUCT_TRAITS_BEGIN(network::URLLoaderCompletionStatus) IPC_STRUCT_TRAITS_MEMBER(error_code) IPC_STRUCT_TRAITS_MEMBER(exists_in_cache) IPC_STRUCT_TRAITS_MEMBER(completion_time) @@ -373,7 +373,7 @@ // Sent when the request has been completed. IPC_MESSAGE_CONTROL2(ResourceMsg_RequestComplete, int /* request_id */, - network::URLLoaderStatus) + network::URLLoaderCompletionStatus) // Resource messages sent from the renderer to the browser.
diff --git a/content/common/throttling_url_loader.cc b/content/common/throttling_url_loader.cc index 7d4cac5..cfa211a 100644 --- a/content/common/throttling_url_loader.cc +++ b/content/common/throttling_url_loader.cc
@@ -421,7 +421,8 @@ forwarding_client_->OnStartLoadingResponseBody(std::move(body)); } -void ThrottlingURLLoader::OnComplete(const network::URLLoaderStatus& status) { +void ThrottlingURLLoader::OnComplete( + const network::URLLoaderCompletionStatus& status) { DCHECK_EQ(DEFERRED_NONE, deferred_stage_); DCHECK(!loader_cancelled_); @@ -444,7 +445,7 @@ if (loader_cancelled_) return; - network::URLLoaderStatus status; + network::URLLoaderCompletionStatus status; status.error_code = error_code; status.completion_time = base::TimeTicks::Now();
diff --git a/content/common/throttling_url_loader.h b/content/common/throttling_url_loader.h index d1140a7..d0f2b53 100644 --- a/content/common/throttling_url_loader.h +++ b/content/common/throttling_url_loader.h
@@ -132,7 +132,7 @@ void OnTransferSizeUpdated(int32_t transfer_size_diff) override; void OnStartLoadingResponseBody( mojo::ScopedDataPipeConsumerHandle body) override; - void OnComplete(const network::URLLoaderStatus& status) override; + void OnComplete(const network::URLLoaderCompletionStatus& status) override; void OnClientConnectionError();
diff --git a/content/common/throttling_url_loader_unittest.cc b/content/common/throttling_url_loader_unittest.cc index 4164d99..73de5378 100644 --- a/content/common/throttling_url_loader_unittest.cc +++ b/content/common/throttling_url_loader_unittest.cc
@@ -57,7 +57,7 @@ } void NotifyClientOnComplete(int error_code) { - network::URLLoaderStatus data; + network::URLLoaderCompletionStatus data; data.error_code = error_code; client_ptr_->OnComplete(data); } @@ -154,7 +154,7 @@ void OnTransferSizeUpdated(int32_t transfer_size_diff) override {} void OnStartLoadingResponseBody( mojo::ScopedDataPipeConsumerHandle body) override {} - void OnComplete(const network::URLLoaderStatus& status) override { + void OnComplete(const network::URLLoaderCompletionStatus& status) override { on_complete_called_++; if (on_complete_callback_) on_complete_callback_.Run(status.error_code);
diff --git a/content/network/cache_url_loader.cc b/content/network/cache_url_loader.cc index e07fd244..6225f1a 100644 --- a/content/network/cache_url_loader.cc +++ b/content/network/cache_url_loader.cc
@@ -61,7 +61,7 @@ mojo::common::BlockingCopyFromString(data_, data_pipe.producer_handle)); client_->OnStartLoadingResponseBody(std::move(data_pipe.consumer_handle)); - network::URLLoaderStatus status(net::OK); + network::URLLoaderCompletionStatus status(net::OK); status.encoded_data_length = data_.size(); status.encoded_body_length = data_.size(); client_->OnComplete(status);
diff --git a/content/network/network_service_unittest.cc b/content/network/network_service_unittest.cc index 3eaf4be1..f64b82c 100644 --- a/content/network/network_service_unittest.cc +++ b/content/network/network_service_unittest.cc
@@ -183,7 +183,7 @@ // works. TEST_F(NetworkServiceTestWithService, Basic) { LoadURL(test_server()->GetURL("/echo")); - EXPECT_EQ(net::OK, client()->status().error_code); + EXPECT_EQ(net::OK, client()->completion_status().error_code); } // Verifies that raw headers are only reported if requested. @@ -283,20 +283,21 @@ StartLoadingURL(request, 0); client()->RunUntilComplete(); - EXPECT_EQ(net::OK, client()->status().error_code); + EXPECT_EQ(net::OK, client()->completion_status().error_code); request.headers.AddHeaderFromString( "X-DevTools-Emulate-Network-Conditions-Client-Id: 42"); StartLoadingURL(request, 0); client()->RunUntilComplete(); - EXPECT_EQ(net::ERR_INTERNET_DISCONNECTED, client()->status().error_code); + EXPECT_EQ(net::ERR_INTERNET_DISCONNECTED, + client()->completion_status().error_code); network_conditions = mojom::NetworkConditions::New(); network_conditions->offline = false; context()->SetNetworkConditions("42", std::move(network_conditions)); StartLoadingURL(request, 0); client()->RunUntilComplete(); - EXPECT_EQ(net::OK, client()->status().error_code); + EXPECT_EQ(net::OK, client()->completion_status().error_code); network_conditions = mojom::NetworkConditions::New(); network_conditions->offline = true; @@ -306,11 +307,12 @@ "X-DevTools-Emulate-Network-Conditions-Client-Id: 42"); StartLoadingURL(request, 0); client()->RunUntilComplete(); - EXPECT_EQ(net::ERR_INTERNET_DISCONNECTED, client()->status().error_code); + EXPECT_EQ(net::ERR_INTERNET_DISCONNECTED, + client()->completion_status().error_code); context()->SetNetworkConditions("42", nullptr); StartLoadingURL(request, 0); client()->RunUntilComplete(); - EXPECT_EQ(net::OK, client()->status().error_code); + EXPECT_EQ(net::OK, client()->completion_status().error_code); } class TestNetworkChangeManagerClient
diff --git a/content/network/url_loader.cc b/content/network/url_loader.cc index d719c31..c7a470c 100644 --- a/content/network/url_loader.cc +++ b/content/network/url_loader.cc
@@ -632,7 +632,7 @@ if (consumer_handle_.is_valid()) SendResponseToClient(); - network::URLLoaderStatus status; + network::URLLoaderCompletionStatus status; status.error_code = error_code; status.exists_in_cache = url_request_->response_info().was_cached; status.completion_time = base::TimeTicks::Now();
diff --git a/content/network/url_loader_unittest.cc b/content/network/url_loader_unittest.cc index 66f88768..1619ce1 100644 --- a/content/network/url_loader_unittest.cc +++ b/content/network/url_loader_unittest.cc
@@ -200,10 +200,11 @@ client_.RunUntilComplete(); if (body) { EXPECT_EQ(body->size(), - static_cast<size_t>(client()->status().decoded_body_length)); + static_cast<size_t>( + client()->completion_status().decoded_body_length)); } - return client_.status().error_code; + return client_.completion_status().error_code; } void LoadAndCompareFile(const std::string& path) { @@ -223,14 +224,17 @@ EXPECT_EQ(expected, body); // The file isn't compressed, so both encoded and decoded body lengths // should match the read body length. - EXPECT_EQ(expected.size(), - static_cast<size_t>(client()->status().decoded_body_length)); - EXPECT_EQ(expected.size(), - static_cast<size_t>(client()->status().encoded_body_length)); + EXPECT_EQ( + expected.size(), + static_cast<size_t>(client()->completion_status().decoded_body_length)); + EXPECT_EQ( + expected.size(), + static_cast<size_t>(client()->completion_status().encoded_body_length)); // Over the wire length should include headers, so should be longer. // TODO(mmenke): Worth adding better tests for encoded_data_length? - EXPECT_LT(expected.size(), - static_cast<size_t>(client()->status().encoded_data_length)); + EXPECT_LT( + expected.size(), + static_cast<size_t>(client()->completion_status().encoded_data_length)); } // Adds a MultipleWritesInterceptor for MultipleWritesInterceptor::GetURL() @@ -426,11 +430,11 @@ EXPECT_EQ("Body", body); // Deflating a 4-byte string should result in a longer string - main thing to // check here, though, is that the two lengths are of different. - EXPECT_LT(client()->status().decoded_body_length, - client()->status().encoded_body_length); + EXPECT_LT(client()->completion_status().decoded_body_length, + client()->completion_status().encoded_body_length); // Over the wire length should include headers, so should be longer. - EXPECT_LT(client()->status().encoded_body_length, - client()->status().encoded_data_length); + EXPECT_LT(client()->completion_status().encoded_body_length, + client()->completion_status().encoded_data_length); } TEST_F(URLLoaderTest, ErrorBeforeHeaders) {
diff --git a/content/public/common/simple_url_loader.cc b/content/public/common/simple_url_loader.cc index c26d75c..1e97402a 100644 --- a/content/public/common/simple_url_loader.cc +++ b/content/public/common/simple_url_loader.cc
@@ -98,8 +98,8 @@ // net::OK, the pipe was closed and all data received was successfully // handled. This could indicate an error, concellation, or completion. To // determine which case this is, the size will also be compared to the size - // reported in network::URLLoaderStatus(), if network::URLLoaderStatus - // indicates a success. + // reported in network::URLLoaderCompletionStatus(), if + // network::URLLoaderCompletionStatus indicates a success. void OnBodyHandlerDone(net::Error error, int64_t received_body_size); // Finished the request with the provided error code, after freeing Mojo @@ -115,7 +115,8 @@ ~RequestState() = default; bool request_completed = false; - // The expected total size of the body, taken from network::URLLoaderStatus. + // The expected total size of the body, taken from + // network::URLLoaderCompletionStatus. int64_t expected_body_size = 0; bool body_started = false; @@ -162,7 +163,7 @@ OnUploadProgressCallback ack_callback) override; void OnStartLoadingResponseBody( mojo::ScopedDataPipeConsumerHandle body) override; - void OnComplete(const network::URLLoaderStatus& status) override; + void OnComplete(const network::URLLoaderCompletionStatus& status) override; // Bound to the URLLoaderClient message pipe (|client_binding_|) via // set_connection_error_handler. @@ -783,8 +784,8 @@ BodyAsStringCallback body_as_string_callback) { body_handler_ = std::make_unique<SaveToStringBodyHandler>( this, std::move(body_as_string_callback), - // int64_t because network::URLLoaderStatus::decoded_body_length is an - // int64_t, not a size_t. + // int64_t because network::URLLoaderCompletionStatus::decoded_body_length + // is an int64_t, not a size_t. std::numeric_limits<int64_t>::max()); Start(resource_request, url_loader_factory, annotation_tag); } @@ -1037,7 +1038,8 @@ body_handler_->OnStartLoadingResponseBody(std::move(body)); } -void SimpleURLLoaderImpl::OnComplete(const network::URLLoaderStatus& status) { +void SimpleURLLoaderImpl::OnComplete( + const network::URLLoaderCompletionStatus& status) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); // Request should not have been completed yet. DCHECK(!request_state_->finished); @@ -1111,8 +1113,8 @@ request_state_->net_error = net::ERR_FAILED; } else { // The caller provided more data through the pipe than it reported in - // network::URLLoaderStatus, so the URLLoader is violating the API - // contract. Just fail the request. + // network::URLLoaderCompletionStatus, so the URLLoader is violating the + // API contract. Just fail the request. request_state_->net_error = net::ERR_UNEXPECTED; } }
diff --git a/content/public/common/simple_url_loader_unittest.cc b/content/public/common/simple_url_loader_unittest.cc index 06852424a..064f2b74 100644 --- a/content/public/common/simple_url_loader_unittest.cc +++ b/content/public/common/simple_url_loader_unittest.cc
@@ -42,7 +42,7 @@ #include "net/test/embedded_test_server/http_response.h" #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" #include "net/url_request/redirect_info.h" -#include "services/network/public/cpp/url_loader_status.h" +#include "services/network/public/cpp/url_loader_completion_status.h" #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h" @@ -913,14 +913,14 @@ break; } case TestLoaderEvent::kResponseComplete: { - network::URLLoaderStatus status; + network::URLLoaderCompletionStatus status; status.error_code = net::OK; status.decoded_body_length = CountBytesToSend(); client_->OnComplete(status); break; } case TestLoaderEvent::kResponseCompleteFailed: { - network::URLLoaderStatus status; + network::URLLoaderCompletionStatus status; // Use an error that SimpleURLLoader doesn't create itself, so clear // when this is the source of the error code. status.error_code = net::ERR_TIMED_OUT; @@ -929,14 +929,14 @@ break; } case TestLoaderEvent::kResponseCompleteNetworkChanged: { - network::URLLoaderStatus status; + network::URLLoaderCompletionStatus status; status.error_code = net::ERR_NETWORK_CHANGED; status.decoded_body_length = CountBytesToSend(); client_->OnComplete(status); break; } case TestLoaderEvent::kResponseCompleteTruncated: { - network::URLLoaderStatus status; + network::URLLoaderCompletionStatus status; status.error_code = net::OK; status.decoded_body_length = CountBytesToSend() + 1; client_->OnComplete(status); @@ -945,7 +945,7 @@ case TestLoaderEvent::kResponseCompleteWithExtraData: { // Make sure |decoded_body_length| doesn't underflow. DCHECK_GT(CountBytesToSend(), 0u); - network::URLLoaderStatus status; + network::URLLoaderCompletionStatus status; status.error_code = net::OK; status.decoded_body_length = CountBytesToSend() - 1; client_->OnComplete(status);
diff --git a/content/public/common/typemaps.gni b/content/public/common/typemaps.gni index 004ec91..a76a2db 100644 --- a/content/public/common/typemaps.gni +++ b/content/public/common/typemaps.gni
@@ -9,7 +9,7 @@ "//content/public/common/referrer.typemap", "//content/public/common/resource_type.typemap", "//content/public/common/ssl_info.typemap", - "//content/public/common/url_loader_status.typemap", + "//content/public/common/url_loader_completion_status.typemap", "//content/public/common/url_request.typemap", "//content/public/common/url_request_redirect_info.typemap", "//content/public/common/url_response_head.typemap",
diff --git a/content/public/common/url_loader.mojom b/content/public/common/url_loader.mojom index 8e349ae..faec8cf6 100644 --- a/content/public/common/url_loader.mojom +++ b/content/public/common/url_loader.mojom
@@ -20,7 +20,7 @@ struct CORSErrorStatus; [Native] -struct URLLoaderStatus; +struct URLLoaderCompletionStatus; // This enum corresponds to net::RequestPriority. See its comments for details. enum RequestPriority { @@ -108,6 +108,6 @@ // Called when the loading completes. No notification will be dispatched for // this client after this message arrives. - OnComplete(URLLoaderStatus status); + OnComplete(URLLoaderCompletionStatus status); };
diff --git a/content/public/common/url_loader_status.typemap b/content/public/common/url_loader_completion_status.typemap similarity index 68% rename from content/public/common/url_loader_status.typemap rename to content/public/common/url_loader_completion_status.typemap index 007bbb4..18b46bc5 100644 --- a/content/public/common/url_loader_status.typemap +++ b/content/public/common/url_loader_completion_status.typemap
@@ -3,7 +3,8 @@ # found in the LICENSE file. mojom = "//content/public/common/url_loader.mojom" -public_headers = [ "//services/network/public/cpp/url_loader_status.h" ] +public_headers = + [ "//services/network/public/cpp/url_loader_completion_status.h" ] traits_headers = [ "//content/common/resource_messages.h" ] deps = [ "//content:export", @@ -11,4 +12,4 @@ "//services/network/public/cpp", "//third_party/WebKit/public:blink_headers", ] -type_mappings = [ "content.mojom.URLLoaderStatus=network::URLLoaderStatus" ] +type_mappings = [ "content.mojom.URLLoaderCompletionStatus=network::URLLoaderCompletionStatus" ]
diff --git a/content/public/renderer/request_peer.h b/content/public/renderer/request_peer.h index 48cc44b..888bd86 100644 --- a/content/public/renderer/request_peer.h +++ b/content/public/renderer/request_peer.h
@@ -17,7 +17,7 @@ } namespace network { -struct URLLoaderStatus; +struct URLLoaderCompletionStatus; } namespace content { @@ -93,7 +93,8 @@ // Called when the response is complete. This method signals completion of // the resource load. - virtual void OnCompletedRequest(const network::URLLoaderStatus& status) = 0; + virtual void OnCompletedRequest( + const network::URLLoaderCompletionStatus& status) = 0; virtual ~RequestPeer() {} };
diff --git a/content/public/test/test_url_loader_client.cc b/content/public/test/test_url_loader_client.cc index 8b01754..95e2962 100644 --- a/content/public/test/test_url_loader_client.cc +++ b/content/public/test/test_url_loader_client.cc
@@ -100,10 +100,11 @@ quit_closure_for_on_start_loading_response_body_.Run(); } -void TestURLLoaderClient::OnComplete(const network::URLLoaderStatus& status) { +void TestURLLoaderClient::OnComplete( + const network::URLLoaderCompletionStatus& status) { EXPECT_FALSE(has_received_completion_); has_received_completion_ = true; - status_ = status; + completion_status_ = status; if (quit_closure_for_on_complete_) quit_closure_for_on_complete_.Run(); }
diff --git a/content/public/test/test_url_loader_client.h b/content/public/test/test_url_loader_client.h index b42a059..fd5557f0 100644 --- a/content/public/test/test_url_loader_client.h +++ b/content/public/test/test_url_loader_client.h
@@ -16,7 +16,7 @@ #include "mojo/public/c/system/data_pipe.h" #include "mojo/public/cpp/bindings/binding.h" #include "net/url_request/redirect_info.h" -#include "services/network/public/cpp/url_loader_status.h" +#include "services/network/public/cpp/url_loader_completion_status.h" namespace content { @@ -46,7 +46,7 @@ OnUploadProgressCallback ack_callback) override; void OnStartLoadingResponseBody( mojo::ScopedDataPipeConsumerHandle body) override; - void OnComplete(const network::URLLoaderStatus& status) override; + void OnComplete(const network::URLLoaderCompletionStatus& status) override; bool has_received_response() const { return has_received_response_; } bool has_received_redirect() const { return has_received_redirect_; } @@ -66,7 +66,9 @@ mojo::ScopedDataPipeConsumerHandle response_body_release() { return std::move(response_body_); } - const network::URLLoaderStatus& status() const { return status_; } + const network::URLLoaderCompletionStatus& completion_status() const { + return completion_status_; + } int64_t download_data_length() const { return download_data_length_; } int64_t encoded_download_data_length() const { return encoded_download_data_length_; @@ -102,7 +104,7 @@ net::RedirectInfo redirect_info_; std::string cached_metadata_; mojo::ScopedDataPipeConsumerHandle response_body_; - network::URLLoaderStatus status_; + network::URLLoaderCompletionStatus completion_status_; bool has_received_response_ = false; bool has_received_redirect_ = false; bool has_data_downloaded_ = false;
diff --git a/content/renderer/fetchers/resource_fetcher_impl.cc b/content/renderer/fetchers/resource_fetcher_impl.cc index fe771871..c52e16af 100644 --- a/content/renderer/fetchers/resource_fetcher_impl.cc +++ b/content/renderer/fetchers/resource_fetcher_impl.cc
@@ -208,7 +208,7 @@ base::Unretained(this))); ReadDataPipe(); } - void OnComplete(const network::URLLoaderStatus& status) override { + void OnComplete(const network::URLLoaderCompletionStatus& status) override { // When Cancel() sets |complete_|, OnComplete() may be called. if (completed_) return;
diff --git a/content/renderer/loader/cors_url_loader.cc b/content/renderer/loader/cors_url_loader.cc index 883e0e1..5cc36f8 100644 --- a/content/renderer/loader/cors_url_loader.cc +++ b/content/renderer/loader/cors_url_loader.cc
@@ -59,7 +59,7 @@ if (fetch_cors_flag_ && fetch_request_mode_ == FetchRequestMode::kSameOrigin) { - forwarding_client_->OnComplete(network::URLLoaderStatus( + forwarding_client_->OnComplete(network::URLLoaderCompletionStatus( network::CORSErrorStatus(CORSError::kDisallowedByMode))); return; } @@ -124,7 +124,7 @@ if (cors_error) { // TODO(toyoshim): Generate related_response_headers here. network::CORSErrorStatus cors_error_status(*cors_error); - HandleComplete(network::URLLoaderStatus(cors_error_status)); + HandleComplete(network::URLLoaderCompletionStatus(cors_error_status)); return; } } @@ -189,7 +189,8 @@ forwarding_client_->OnStartLoadingResponseBody(std::move(body)); } -void CORSURLLoader::OnComplete(const network::URLLoaderStatus& status) { +void CORSURLLoader::OnComplete( + const network::URLLoaderCompletionStatus& status) { DCHECK(network_loader_); DCHECK(forwarding_client_); DCHECK(!is_waiting_follow_redirect_call_); @@ -205,7 +206,8 @@ forwarding_client_.reset(); } -void CORSURLLoader::HandleComplete(const network::URLLoaderStatus& status) { +void CORSURLLoader::HandleComplete( + const network::URLLoaderCompletionStatus& status) { forwarding_client_->OnComplete(status); forwarding_client_.reset();
diff --git a/content/renderer/loader/cors_url_loader.h b/content/renderer/loader/cors_url_loader.h index a4fc75cf..7683194 100644 --- a/content/renderer/loader/cors_url_loader.h +++ b/content/renderer/loader/cors_url_loader.h
@@ -55,7 +55,7 @@ void OnTransferSizeUpdated(int32_t transfer_size_diff) override; void OnStartLoadingResponseBody( mojo::ScopedDataPipeConsumerHandle body) override; - void OnComplete(const network::URLLoaderStatus& status) override; + void OnComplete(const network::URLLoaderCompletionStatus& status) override; private: // Called when there is a connection error on the upstream pipe used for the @@ -63,7 +63,7 @@ void OnUpstreamConnectionError(); // Handles OnComplete() callback. - void HandleComplete(const network::URLLoaderStatus& status); + void HandleComplete(const network::URLLoaderCompletionStatus& status); // This raw URLLoaderFactory pointer is shared with the CORSURLLoaderFactory // that created and owns this object.
diff --git a/content/renderer/loader/cors_url_loader_unittest.cc b/content/renderer/loader/cors_url_loader_unittest.cc index d54dfffc..a60c52d 100644 --- a/content/renderer/loader/cors_url_loader_unittest.cc +++ b/content/renderer/loader/cors_url_loader_unittest.cc
@@ -41,7 +41,7 @@ void NotifyClientOnComplete(int error_code) { DCHECK(client_ptr_); - client_ptr_->OnComplete(network::URLLoaderStatus(error_code)); + client_ptr_->OnComplete(network::URLLoaderCompletionStatus(error_code)); } bool IsCreateLoaderAndStartCalled() { return !!client_ptr_; } @@ -149,7 +149,7 @@ EXPECT_FALSE(client().has_received_redirect()); EXPECT_TRUE(client().has_received_response()); EXPECT_TRUE(client().has_received_completion()); - EXPECT_EQ(net::OK, client().status().error_code); + EXPECT_EQ(net::OK, client().completion_status().error_code); } TEST_F(CORSURLLoaderTest, CrossOriginRequestWithNoCORSMode) { @@ -166,7 +166,7 @@ EXPECT_FALSE(client().has_received_redirect()); EXPECT_TRUE(client().has_received_response()); EXPECT_TRUE(client().has_received_completion()); - EXPECT_EQ(net::OK, client().status().error_code); + EXPECT_EQ(net::OK, client().completion_status().error_code); } TEST_F(CORSURLLoaderTest, CrossOriginRequestFetchRequestModeSameOrigin) { @@ -182,10 +182,10 @@ EXPECT_FALSE(IsNetworkLoaderStarted()); EXPECT_FALSE(client().has_received_redirect()); EXPECT_FALSE(client().has_received_response()); - EXPECT_EQ(net::ERR_FAILED, client().status().error_code); - ASSERT_TRUE(client().status().cors_error_status); + EXPECT_EQ(net::ERR_FAILED, client().completion_status().error_code); + ASSERT_TRUE(client().completion_status().cors_error_status); EXPECT_EQ(network::mojom::CORSError::kDisallowedByMode, - client().status().cors_error_status->cors_error); + client().completion_status().cors_error_status->cors_error); } TEST_F(CORSURLLoaderTest, CrossOriginRequestWithCORSModeButMissingCORSHeader) { @@ -201,10 +201,10 @@ EXPECT_TRUE(IsNetworkLoaderStarted()); EXPECT_FALSE(client().has_received_redirect()); EXPECT_FALSE(client().has_received_response()); - EXPECT_EQ(net::ERR_FAILED, client().status().error_code); - ASSERT_TRUE(client().status().cors_error_status); + EXPECT_EQ(net::ERR_FAILED, client().completion_status().error_code); + ASSERT_TRUE(client().completion_status().cors_error_status); EXPECT_EQ(network::mojom::CORSError::kMissingAllowOriginHeader, - client().status().cors_error_status->cors_error); + client().completion_status().cors_error_status->cors_error); } TEST_F(CORSURLLoaderTest, CrossOriginRequestWithCORSMode) { @@ -222,7 +222,7 @@ EXPECT_FALSE(client().has_received_redirect()); EXPECT_TRUE(client().has_received_response()); EXPECT_TRUE(client().has_received_completion()); - EXPECT_EQ(net::OK, client().status().error_code); + EXPECT_EQ(net::OK, client().completion_status().error_code); } TEST_F(CORSURLLoaderTest, @@ -240,10 +240,10 @@ EXPECT_TRUE(IsNetworkLoaderStarted()); EXPECT_FALSE(client().has_received_redirect()); EXPECT_FALSE(client().has_received_response()); - EXPECT_EQ(net::ERR_FAILED, client().status().error_code); - ASSERT_TRUE(client().status().cors_error_status); + EXPECT_EQ(net::ERR_FAILED, client().completion_status().error_code); + ASSERT_TRUE(client().completion_status().cors_error_status); EXPECT_EQ(network::mojom::CORSError::kAllowOriginMismatch, - client().status().cors_error_status->cors_error); + client().completion_status().cors_error_status->cors_error); } } // namespace
diff --git a/content/renderer/loader/resource_dispatcher.cc b/content/renderer/loader/resource_dispatcher.cc index 77eec19..dce3c4e 100644 --- a/content/renderer/loader/resource_dispatcher.cc +++ b/content/renderer/loader/resource_dispatcher.cc
@@ -43,7 +43,7 @@ #include "net/base/net_errors.h" #include "net/base/request_priority.h" #include "net/http/http_response_headers.h" -#include "services/network/public/cpp/url_loader_status.h" +#include "services/network/public/cpp/url_loader_completion_status.h" namespace content { @@ -340,7 +340,7 @@ void ResourceDispatcher::OnRequestComplete( int request_id, - const network::URLLoaderStatus& status) { + const network::URLLoaderCompletionStatus& status) { TRACE_EVENT0("loader", "ResourceDispatcher::OnRequestComplete"); PendingRequestInfo* request_info = GetPendingRequestInfo(request_id); @@ -369,7 +369,7 @@ // TODO(kinuko): Revisit here. This probably needs to call request_info->peer // but the past attempt to change it seems to have caused crashes. // (crbug.com/547047) - network::URLLoaderStatus renderer_status(status); + network::URLLoaderCompletionStatus renderer_status(status); renderer_status.completion_time = ToRendererCompletionTime(*request_info, status.completion_time); peer->OnCompletedRequest(renderer_status); @@ -775,7 +775,7 @@ // Call OnComplete now too, as it won't get called on the client. // TODO(kinuko): Fill this properly. - network::URLLoaderStatus status; + network::URLLoaderCompletionStatus status; status.error_code = net::OK; status.exists_in_cache = false; status.completion_time = base::TimeTicks::Now();
diff --git a/content/renderer/loader/resource_dispatcher.h b/content/renderer/loader/resource_dispatcher.h index 3c22cecb..e375ec6 100644 --- a/content/renderer/loader/resource_dispatcher.h +++ b/content/renderer/loader/resource_dispatcher.h
@@ -39,7 +39,7 @@ } namespace network { -struct URLLoaderStatus; +struct URLLoaderCompletionStatus; } namespace content { @@ -242,7 +242,7 @@ int encoded_data_length); void OnDownloadedData(int request_id, int data_len, int encoded_data_length); void OnRequestComplete(int request_id, - const network::URLLoaderStatus& status); + const network::URLLoaderCompletionStatus& status); // Dispatch the message to one of the message response handlers. void DispatchMessage(const IPC::Message& message);
diff --git a/content/renderer/loader/resource_dispatcher_unittest.cc b/content/renderer/loader/resource_dispatcher_unittest.cc index 972dccb..2c3009b 100644 --- a/content/renderer/loader/resource_dispatcher_unittest.cc +++ b/content/renderer/loader/resource_dispatcher_unittest.cc
@@ -37,7 +37,7 @@ #include "net/base/request_priority.h" #include "net/http/http_response_headers.h" #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" -#include "services/network/public/cpp/url_loader_status.h" +#include "services/network/public/cpp/url_loader_completion_status.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/WebKit/public/platform/WebReferrerPolicy.h" #include "url/gurl.h" @@ -193,7 +193,7 @@ } void NotifyRequestComplete(int request_id, size_t total_size) { - network::URLLoaderStatus status; + network::URLLoaderCompletionStatus status; status.error_code = net::OK; status.exists_in_cache = false; status.encoded_data_length = total_size; @@ -426,7 +426,8 @@ } void OnTransferSizeUpdated(int transfer_size_diff) override {} - void OnCompletedRequest(const network::URLLoaderStatus& status) override { + void OnCompletedRequest( + const network::URLLoaderCompletionStatus& status) override { original_peer_->OnReceivedResponse(response_info_); if (!data_.empty()) { original_peer_->OnReceivedData(
diff --git a/content/renderer/loader/sync_load_context.cc b/content/renderer/loader/sync_load_context.cc index edd13b3d..b367bda 100644 --- a/content/renderer/loader/sync_load_context.cc +++ b/content/renderer/loader/sync_load_context.cc
@@ -99,7 +99,7 @@ void SyncLoadContext::OnTransferSizeUpdated(int transfer_size_diff) {} void SyncLoadContext::OnCompletedRequest( - const network::URLLoaderStatus& status) { + const network::URLLoaderCompletionStatus& status) { response_->error_code = status.error_code; if (status.cors_error_status) response_->cors_error = status.cors_error_status->cors_error;
diff --git a/content/renderer/loader/sync_load_context.h b/content/renderer/loader/sync_load_context.h index 4df890d..d02549e 100644 --- a/content/renderer/loader/sync_load_context.h +++ b/content/renderer/loader/sync_load_context.h
@@ -56,7 +56,8 @@ void OnDownloadedData(int len, int encoded_data_length) override; void OnReceivedData(std::unique_ptr<ReceivedData> data) override; void OnTransferSizeUpdated(int transfer_size_diff) override; - void OnCompletedRequest(const network::URLLoaderStatus& status) override; + void OnCompletedRequest( + const network::URLLoaderCompletionStatus& status) override; // This raw pointer will remain valid for the lifetime of this object because // it remains on the stack until |event_| is signaled.
diff --git a/content/renderer/loader/test_request_peer.cc b/content/renderer/loader/test_request_peer.cc index 6080915..70d16c1d 100644 --- a/content/renderer/loader/test_request_peer.cc +++ b/content/renderer/loader/test_request_peer.cc
@@ -81,7 +81,7 @@ } void TestRequestPeer::OnCompletedRequest( - const network::URLLoaderStatus& status) { + const network::URLLoaderCompletionStatus& status) { if (context_->cancelled) return; EXPECT_TRUE(context_->received_response);
diff --git a/content/renderer/loader/test_request_peer.h b/content/renderer/loader/test_request_peer.h index b90d14a..4ff4a521 100644 --- a/content/renderer/loader/test_request_peer.h +++ b/content/renderer/loader/test_request_peer.h
@@ -38,7 +38,8 @@ void OnReceivedData(std::unique_ptr<ReceivedData> data) override; void OnTransferSizeUpdated(int transfer_size_diff) override; void OnReceivedCachedMetadata(const char* data, int len) override; - void OnCompletedRequest(const network::URLLoaderStatus& status) override; + void OnCompletedRequest( + const network::URLLoaderCompletionStatus& status) override; struct Context final { Context();
diff --git a/content/renderer/loader/url_loader_client_impl.cc b/content/renderer/loader/url_loader_client_impl.cc index a4c48499..885b798 100644 --- a/content/renderer/loader/url_loader_client_impl.cc +++ b/content/renderer/loader/url_loader_client_impl.cc
@@ -173,7 +173,8 @@ body_consumer_->OnReadable(MOJO_RESULT_OK); } -void URLLoaderClientImpl::OnComplete(const network::URLLoaderStatus& status) { +void URLLoaderClientImpl::OnComplete( + const network::URLLoaderCompletionStatus& status) { if (!body_consumer_) { if (NeedsStoringMessage()) { StoreAndDispatch(ResourceMsg_RequestComplete(request_id_, status));
diff --git a/content/renderer/loader/url_loader_client_impl.h b/content/renderer/loader/url_loader_client_impl.h index c2082a7..e474354 100644 --- a/content/renderer/loader/url_loader_client_impl.h +++ b/content/renderer/loader/url_loader_client_impl.h
@@ -24,7 +24,7 @@ } // namespace net namespace network { -struct URLLoaderStatus; +struct URLLoaderCompletionStatus; } // namespace network namespace content { @@ -63,7 +63,7 @@ void OnTransferSizeUpdated(int32_t transfer_size_diff) override; void OnStartLoadingResponseBody( mojo::ScopedDataPipeConsumerHandle body) override; - void OnComplete(const network::URLLoaderStatus& status) override; + void OnComplete(const network::URLLoaderCompletionStatus& status) override; private: bool NeedsStoringMessage() const;
diff --git a/content/renderer/loader/url_loader_client_impl_unittest.cc b/content/renderer/loader/url_loader_client_impl_unittest.cc index 9c62c37..572a0cf 100644 --- a/content/renderer/loader/url_loader_client_impl_unittest.cc +++ b/content/renderer/loader/url_loader_client_impl_unittest.cc
@@ -176,7 +176,7 @@ TEST_F(URLLoaderClientImplTest, OnCompleteWithoutResponseBody) { ResourceResponseHead response_head; - network::URLLoaderStatus status; + network::URLLoaderCompletionStatus status; url_loader_client_->OnReceiveResponse(response_head, base::nullopt, nullptr); url_loader_client_->OnComplete(status); @@ -190,7 +190,7 @@ TEST_F(URLLoaderClientImplTest, OnCompleteWithResponseBody) { ResourceResponseHead response_head; - network::URLLoaderStatus status; + network::URLLoaderCompletionStatus status; url_loader_client_->OnReceiveResponse(response_head, base::nullopt, nullptr); mojo::DataPipe data_pipe(DataPipeOptions()); @@ -224,7 +224,7 @@ // restore the order. TEST_F(URLLoaderClientImplTest, OnCompleteShouldBeTheLastMessage) { ResourceResponseHead response_head; - network::URLLoaderStatus status; + network::URLLoaderCompletionStatus status; url_loader_client_->OnReceiveResponse(response_head, base::nullopt, nullptr); mojo::DataPipe data_pipe(DataPipeOptions()); @@ -256,7 +256,7 @@ request_peer_context_.cancel_on_receive_response = true; ResourceResponseHead response_head; - network::URLLoaderStatus status; + network::URLLoaderCompletionStatus status; url_loader_client_->OnReceiveResponse(response_head, base::nullopt, nullptr); mojo::DataPipe data_pipe(DataPipeOptions()); @@ -278,7 +278,7 @@ request_peer_context_.cancel_on_receive_data = true; ResourceResponseHead response_head; - network::URLLoaderStatus status; + network::URLLoaderCompletionStatus status; mojo::DataPipe data_pipe(DataPipeOptions()); uint32_t size = 5; @@ -306,7 +306,7 @@ TEST_F(URLLoaderClientImplTest, Defer) { ResourceResponseHead response_head; - network::URLLoaderStatus status; + network::URLLoaderCompletionStatus status; url_loader_client_->OnReceiveResponse(response_head, base::nullopt, nullptr); url_loader_client_->OnComplete(status); @@ -331,7 +331,7 @@ TEST_F(URLLoaderClientImplTest, DeferWithResponseBody) { ResourceResponseHead response_head; - network::URLLoaderStatus status; + network::URLLoaderCompletionStatus status; url_loader_client_->OnReceiveResponse(response_head, base::nullopt, nullptr); mojo::DataPipe data_pipe(DataPipeOptions()); @@ -372,7 +372,7 @@ // we have a separate test. TEST_F(URLLoaderClientImplTest, DeferWithTransferSizeUpdated) { ResourceResponseHead response_head; - network::URLLoaderStatus status; + network::URLLoaderCompletionStatus status; url_loader_client_->OnReceiveResponse(response_head, base::nullopt, nullptr); mojo::DataPipe data_pipe(DataPipeOptions()); @@ -419,7 +419,7 @@ net::RedirectInfo redirect_info; ResourceResponseHead response_head; - network::URLLoaderStatus status; + network::URLLoaderCompletionStatus status; url_loader_client_->OnReceiveRedirect(redirect_info, response_head); url_loader_client_->OnReceiveResponse(response_head, base::nullopt, nullptr); @@ -481,7 +481,7 @@ request_peer_context_.defer_on_transfer_size_updated = true; ResourceResponseHead response_head; - network::URLLoaderStatus status; + network::URLLoaderCompletionStatus status; url_loader_client_->OnReceiveResponse(response_head, base::nullopt, nullptr);
diff --git a/content/renderer/loader/url_response_body_consumer.cc b/content/renderer/loader/url_response_body_consumer.cc index 975901b..0ffa014 100644 --- a/content/renderer/loader/url_response_body_consumer.cc +++ b/content/renderer/loader/url_response_body_consumer.cc
@@ -12,7 +12,7 @@ #include "content/public/renderer/request_peer.h" #include "content/renderer/loader/resource_dispatcher.h" #include "content/renderer/loader/site_isolation_stats_gatherer.h" -#include "services/network/public/cpp/url_loader_status.h" +#include "services/network/public/cpp/url_loader_completion_status.h" namespace content { @@ -61,7 +61,7 @@ URLResponseBodyConsumer::~URLResponseBodyConsumer() {} void URLResponseBodyConsumer::OnComplete( - const network::URLLoaderStatus& status) { + const network::URLLoaderCompletionStatus& status) { if (has_been_cancelled_) return; has_received_completion_ = true;
diff --git a/content/renderer/loader/url_response_body_consumer.h b/content/renderer/loader/url_response_body_consumer.h index e11ae709..d99d257 100644 --- a/content/renderer/loader/url_response_body_consumer.h +++ b/content/renderer/loader/url_response_body_consumer.h
@@ -21,7 +21,7 @@ #include "mojo/public/cpp/system/simple_watcher.h" namespace network { -struct URLLoaderStatus; +struct URLLoaderCompletionStatus; } // namespace network namespace content { @@ -44,7 +44,7 @@ // ResourceDispatcher when the both following conditions hold: // 1) This function has been called and the completion status is set, and // 2) All data is read from the handle. - void OnComplete(const network::URLLoaderStatus& status); + void OnComplete(const network::URLLoaderCompletionStatus& status); // Cancels watching the handle and dispatches an error to the // ResourceDispatcher. This function does nothing if the reading is already @@ -79,7 +79,7 @@ ResourceDispatcher* resource_dispatcher_; mojo::ScopedDataPipeConsumerHandle handle_; mojo::SimpleWatcher handle_watcher_; - network::URLLoaderStatus status_; + network::URLLoaderCompletionStatus status_; scoped_refptr<base::SingleThreadTaskRunner> task_runner_; bool has_received_completion_ = false;
diff --git a/content/renderer/loader/url_response_body_consumer_unittest.cc b/content/renderer/loader/url_response_body_consumer_unittest.cc index c527196..3b26571 100644 --- a/content/renderer/loader/url_response_body_consumer_unittest.cc +++ b/content/renderer/loader/url_response_body_consumer_unittest.cc
@@ -20,7 +20,7 @@ #include "content/renderer/loader/resource_dispatcher.h" #include "net/base/request_priority.h" #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" -#include "services/network/public/cpp/url_loader_status.h" +#include "services/network/public/cpp/url_loader_completion_status.h" #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h" #include "url/origin.h" @@ -64,7 +64,8 @@ void OnTransferSizeUpdated(int transfer_size_diff) override {} - void OnCompletedRequest(const network::URLLoaderStatus& status) override { + void OnCompletedRequest( + const network::URLLoaderCompletionStatus& status) override { EXPECT_FALSE(context_->complete); context_->complete = true; context_->error_code = status.error_code; @@ -188,7 +189,7 @@ message_loop_.task_runner())); consumer->ArmOrNotify(); - consumer->OnComplete(network::URLLoaderStatus()); + consumer->OnComplete(network::URLLoaderCompletionStatus()); mojo::ScopedDataPipeProducerHandle writer = std::move(data_pipe.producer_handle); std::string buffer = "hello"; @@ -223,7 +224,7 @@ message_loop_.task_runner())); consumer->ArmOrNotify(); - consumer->OnComplete(network::URLLoaderStatus()); + consumer->OnComplete(network::URLLoaderCompletionStatus()); mojo::ScopedDataPipeProducerHandle writer = std::move(data_pipe.producer_handle); std::string buffer = "hello"; @@ -255,7 +256,7 @@ message_loop_.task_runner())); consumer->ArmOrNotify(); - network::URLLoaderStatus status; + network::URLLoaderCompletionStatus status; status.error_code = net::ERR_FAILED; data_pipe.producer_handle.reset(); consumer->OnComplete(status);
diff --git a/content/renderer/loader/web_url_loader_impl.cc b/content/renderer/loader/web_url_loader_impl.cc index f9f06d0..27b6dcae 100644 --- a/content/renderer/loader/web_url_loader_impl.cc +++ b/content/renderer/loader/web_url_loader_impl.cc
@@ -410,7 +410,7 @@ void OnReceivedData(std::unique_ptr<ReceivedData> data); void OnTransferSizeUpdated(int transfer_size_diff); void OnReceivedCachedMetadata(const char* data, int len); - void OnCompletedRequest(const network::URLLoaderStatus& status); + void OnCompletedRequest(const network::URLLoaderCompletionStatus& status); private: friend class base::RefCounted<Context>; @@ -468,7 +468,8 @@ void OnReceivedData(std::unique_ptr<ReceivedData> data) override; void OnTransferSizeUpdated(int transfer_size_diff) override; void OnReceivedCachedMetadata(const char* data, int len) override; - void OnCompletedRequest(const network::URLLoaderStatus& status) override; + void OnCompletedRequest( + const network::URLLoaderCompletionStatus& status) override; private: scoped_refptr<Context> context_; @@ -881,7 +882,7 @@ } void WebURLLoaderImpl::Context::OnCompletedRequest( - const network::URLLoaderStatus& status) { + const network::URLLoaderCompletionStatus& status) { int64_t total_transfer_size = status.encoded_data_length; int64_t encoded_body_size = status.encoded_body_length; @@ -1017,7 +1018,7 @@ OnReceivedData(std::make_unique<FixedReceivedData>(data.data(), size)); } - network::URLLoaderStatus status(error_code); + network::URLLoaderCompletionStatus status(error_code); status.encoded_body_length = data.size(); status.decoded_body_length = data.size(); OnCompletedRequest(status); @@ -1067,7 +1068,7 @@ } void WebURLLoaderImpl::RequestPeerImpl::OnCompletedRequest( - const network::URLLoaderStatus& status) { + const network::URLLoaderCompletionStatus& status) { context_->OnCompletedRequest(status); }
diff --git a/content/renderer/loader/web_url_loader_impl_unittest.cc b/content/renderer/loader/web_url_loader_impl_unittest.cc index 107f740..5b096cf 100644 --- a/content/renderer/loader/web_url_loader_impl_unittest.cc +++ b/content/renderer/loader/web_url_loader_impl_unittest.cc
@@ -351,7 +351,7 @@ void DoCompleteRequest() { EXPECT_FALSE(client()->did_finish()); - network::URLLoaderStatus status(net::OK); + network::URLLoaderCompletionStatus status(net::OK); status.encoded_data_length = arraysize(kTestData); status.encoded_body_length = arraysize(kTestData); status.decoded_body_length = arraysize(kTestData); @@ -363,7 +363,7 @@ void DoFailRequest() { EXPECT_FALSE(client()->did_finish()); - network::URLLoaderStatus status(net::ERR_FAILED); + network::URLLoaderCompletionStatus status(net::ERR_FAILED); status.encoded_data_length = arraysize(kTestData); status.encoded_body_length = arraysize(kTestData); status.decoded_body_length = arraysize(kTestData); @@ -592,7 +592,7 @@ // cancel in DoReceiveDataFtp, before the request finishes. client()->set_delete_on_receive_data(); - network::URLLoaderStatus status(net::OK); + network::URLLoaderCompletionStatus status(net::OK); status.encoded_data_length = arraysize(kTestData); status.encoded_body_length = arraysize(kTestData); status.decoded_body_length = arraysize(kTestData);
diff --git a/content/renderer/service_worker/service_worker_context_client.cc b/content/renderer/service_worker/service_worker_context_client.cc index a2900f8..8e3d49a 100644 --- a/content/renderer/service_worker/service_worker_context_client.cc +++ b/content/renderer/service_worker/service_worker_context_client.cc
@@ -556,7 +556,7 @@ MaybeReportResponseToClient(); } - void OnComplete(const network::URLLoaderStatus& status) override { + void OnComplete(const network::URLLoaderCompletionStatus& status) override { if (status.error_code != net::OK) { std::string message; std::string unsanitized_message;
diff --git a/content/renderer/service_worker/service_worker_subresource_loader.cc b/content/renderer/service_worker/service_worker_subresource_loader.cc index 75673d22..d0adb67 100644 --- a/content/renderer/service_worker/service_worker_subresource_loader.cc +++ b/content/renderer/service_worker/service_worker_subresource_loader.cc
@@ -120,7 +120,7 @@ url_loader_client_->OnStartLoadingResponseBody(std::move(body)); } - void OnComplete(const network::URLLoaderStatus& status) override { + void OnComplete(const network::URLLoaderCompletionStatus& status) override { DCHECK(url_loader_client_.is_bound()); url_loader_client_->OnComplete(status); } @@ -440,7 +440,7 @@ DCHECK_LT(status_, Status::kCompleted); DCHECK(url_loader_client_.is_bound()); status_ = Status::kCompleted; - network::URLLoaderStatus status; + network::URLLoaderCompletionStatus status; status.error_code = error_code; status.completion_time = base::TimeTicks::Now(); url_loader_client_->OnComplete(status); @@ -539,7 +539,7 @@ } void ServiceWorkerSubresourceLoader::OnComplete( - const network::URLLoaderStatus& status) { + const network::URLLoaderCompletionStatus& status) { DCHECK_EQ(Status::kSentHeader, status_); DCHECK(url_loader_client_.is_bound()); status_ = Status::kCompleted;
diff --git a/content/renderer/service_worker/service_worker_subresource_loader.h b/content/renderer/service_worker/service_worker_subresource_loader.h index 2bff883..6f52f4b 100644 --- a/content/renderer/service_worker/service_worker_subresource_loader.h +++ b/content/renderer/service_worker/service_worker_subresource_loader.h
@@ -115,7 +115,7 @@ void OnTransferSizeUpdated(int32_t transfer_size_diff) override; void OnStartLoadingResponseBody( mojo::ScopedDataPipeConsumerHandle body) override; - void OnComplete(const network::URLLoaderStatus& status) override; + void OnComplete(const network::URLLoaderCompletionStatus& status) override; ResourceResponseHead response_head_; base::Optional<net::RedirectInfo> redirect_info_;
diff --git a/content/renderer/service_worker/service_worker_subresource_loader_unittest.cc b/content/renderer/service_worker/service_worker_subresource_loader_unittest.cc index 4882780..ebb4b79f 100644 --- a/content/renderer/service_worker/service_worker_subresource_loader_unittest.cc +++ b/content/renderer/service_worker/service_worker_subresource_loader_unittest.cc
@@ -62,7 +62,7 @@ MOJO_WRITE_DATA_FLAG_ALL_OR_NONE); client->OnStartLoadingResponseBody(std::move(data_pipe.consumer_handle)); - network::URLLoaderStatus status; + network::URLLoaderCompletionStatus status; status.error_code = net::OK; client->OnComplete(status); } @@ -391,7 +391,7 @@ StartRequest(factory.get(), request, &loader, &client); client->RunUntilComplete(); - EXPECT_EQ(net::ERR_FAILED, client->status().error_code); + EXPECT_EQ(net::ERR_FAILED, client->completion_status().error_code); } TEST_F(ServiceWorkerSubresourceLoaderTest, DropController) { @@ -523,7 +523,7 @@ // inflight fetch event. EXPECT_EQ(2, fake_container_host_.get_controller_service_worker_count()); EXPECT_TRUE(client->has_received_completion()); - EXPECT_EQ(net::ERR_FAILED, client->status().error_code); + EXPECT_EQ(net::ERR_FAILED, client->completion_status().error_code); } TEST_F(ServiceWorkerSubresourceLoaderTest, StreamResponse) { @@ -569,7 +569,7 @@ data_pipe.producer_handle.reset(); client->RunUntilComplete(); - EXPECT_EQ(net::OK, client->status().error_code); + EXPECT_EQ(net::OK, client->completion_status().error_code); // Test the body. std::string response; @@ -616,7 +616,7 @@ StartRequest(factory.get(), request, &loader, &client); client->RunUntilComplete(); - EXPECT_EQ(net::ERR_FAILED, client->status().error_code); + EXPECT_EQ(net::ERR_FAILED, client->completion_status().error_code); } TEST_F(ServiceWorkerSubresourceLoaderTest, RedirectResponse) { @@ -634,7 +634,7 @@ StartRequest(factory.get(), request, &loader, &client); client->RunUntilRedirectReceived(); - EXPECT_EQ(net::OK, client->status().error_code); + EXPECT_EQ(net::OK, client->completion_status().error_code); EXPECT_TRUE(client->has_received_redirect()); { const net::RedirectInfo& redirect_info = client->redirect_info(); @@ -649,7 +649,7 @@ loader->FollowRedirect(); client->RunUntilRedirectReceived(); - EXPECT_EQ(net::OK, client->status().error_code); + EXPECT_EQ(net::OK, client->completion_status().error_code); EXPECT_TRUE(client->has_received_redirect()); { const net::RedirectInfo& redirect_info = client->redirect_info(); @@ -683,7 +683,7 @@ data_pipe.producer_handle.reset(); client->RunUntilComplete(); - EXPECT_EQ(net::OK, client->status().error_code); + EXPECT_EQ(net::OK, client->completion_status().error_code); // Test the body. std::string response; @@ -719,7 +719,7 @@ client->RunUntilRedirectReceived(); EXPECT_TRUE(client->has_received_redirect()); - EXPECT_EQ(net::OK, client->status().error_code); + EXPECT_EQ(net::OK, client->completion_status().error_code); const net::RedirectInfo& redirect_info = client->redirect_info(); EXPECT_EQ(302, redirect_info.status_code); EXPECT_EQ("GET", redirect_info.new_method); @@ -737,7 +737,8 @@ // Fetch can't follow the redirect response 21 times. EXPECT_FALSE(client->has_received_redirect()); - EXPECT_EQ(net::ERR_TOO_MANY_REDIRECTS, client->status().error_code); + EXPECT_EQ(net::ERR_TOO_MANY_REDIRECTS, + client->completion_status().error_code); } // Test when the service worker responds with network fallback to CORS request.
diff --git a/extensions/browser/extension_protocols.cc b/extensions/browser/extension_protocols.cc index 0c12e886..9a734d4 100644 --- a/extensions/browser/extension_protocols.cc +++ b/extensions/browser/extension_protocols.cc
@@ -75,7 +75,7 @@ #include "net/url_request/url_request_error_job.h" #include "net/url_request/url_request_file_job.h" #include "net/url_request/url_request_simple_job.h" -#include "services/network/public/cpp/url_loader_status.h" +#include "services/network/public/cpp/url_loader_completion_status.h" #include "url/url_util.h" using content::ResourceRequestInfo; @@ -703,7 +703,8 @@ util::IsIncognitoEnabled(extension_id, browser_context), registry->enabled_extensions(), *ProcessMap::Get(browser_context))) { - client->OnComplete(network::URLLoaderStatus(net::ERR_BLOCKED_BY_CLIENT)); + client->OnComplete( + network::URLLoaderCompletionStatus(net::ERR_BLOCKED_BY_CLIENT)); return; } @@ -711,7 +712,7 @@ if (!GetDirectoryForExtensionURL(request.url, extension_id, extension, registry->disabled_extensions(), &directory_path)) { - client->OnComplete(network::URLLoaderStatus(net::ERR_FAILED)); + client->OnComplete(network::URLLoaderCompletionStatus(net::ERR_FAILED)); return; } @@ -746,13 +747,13 @@ MojoResult result = pipe.producer_handle->WriteData( contents.data(), &size, MOJO_WRITE_DATA_FLAG_NONE); if (result != MOJO_RESULT_OK || size < contents.size()) { - client->OnComplete(network::URLLoaderStatus(net::ERR_FAILED)); + client->OnComplete(network::URLLoaderCompletionStatus(net::ERR_FAILED)); return; } client->OnReceiveResponse(head, base::nullopt, nullptr); client->OnStartLoadingResponseBody(std::move(pipe.consumer_handle)); - client->OnComplete(network::URLLoaderStatus(net::OK)); + client->OnComplete(network::URLLoaderCompletionStatus(net::OK)); return; } @@ -767,7 +768,8 @@ // files there are internal implementation details that should not be // considered part of the extension. if (base::FilePath(kMetadataFolder).IsParent(relative_path)) { - client->OnComplete(network::URLLoaderStatus(net::ERR_FILE_NOT_FOUND)); + client->OnComplete( + network::URLLoaderCompletionStatus(net::ERR_FILE_NOT_FOUND)); return; } @@ -788,7 +790,7 @@ relative_path = base::FilePath::FromUTF8Unsafe(new_relative_path); } else { client->OnComplete( - network::URLLoaderStatus(net::ERR_BLOCKED_BY_CLIENT)); + network::URLLoaderCompletionStatus(net::ERR_BLOCKED_BY_CLIENT)); return; } }
diff --git a/gpu/tools/compositor_model_bench/compositor_model_bench.cc b/gpu/tools/compositor_model_bench/compositor_model_bench.cc index d93841e..6b2ee21 100644 --- a/gpu/tools/compositor_model_bench/compositor_model_bench.cc +++ b/gpu/tools/compositor_model_bench/compositor_model_bench.cc
@@ -13,9 +13,6 @@ #include <sys/file.h> #include <sys/stat.h> #include <sys/types.h> -#include <X11/keysym.h> -#include <X11/Xlib.h> -#include <X11/Xutil.h> #include <string> #include <utility> @@ -37,6 +34,7 @@ #include "gpu/tools/compositor_model_bench/render_model_utils.h" #include "gpu/tools/compositor_model_bench/render_models.h" #include "gpu/tools/compositor_model_bench/render_tree.h" +#include "ui/gfx/x/x11.h" #include "ui/gl/init/gl_factory.h" using base::TimeTicks; @@ -159,7 +157,7 @@ // Get properties of the screen. int screen = DefaultScreen(display_); - int root_window = RootWindow(display_, screen); + int root_window = XRootWindow(display_, screen); // Creates the window. window_ = XCreateSimpleWindow(display_, @@ -200,7 +198,7 @@ for (int i = 0; i < visual_info_count && !gl_context_; ++i) { gl_context_ = glXCreateContext(display_, visual_info_list + i, 0, - True /* Direct rendering */); + x11::True /* Direct rendering */); } XFree(visual_info_list); @@ -251,11 +249,8 @@ XExposeEvent ev = { Expose, 0, 1, display_, window_, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, 0 }; - XSendEvent(display_, - window_, - False, - ExposureMask, - reinterpret_cast<XEvent*>(&ev)); + XSendEvent(display_, window_, x11::False, ExposureMask, + reinterpret_cast<XEvent*>(&ev)); base::ThreadTaskRunnerHandle::Get()->PostTask( FROM_HERE,
diff --git a/headless/test/data/render/delayed_completion.html b/headless/test/data/render/delayed_completion.html new file mode 100644 index 0000000..28caa2c7 --- /dev/null +++ b/headless/test/data/render/delayed_completion.html
@@ -0,0 +1,13 @@ +<html> + <body> + <script type="text/javascript"> + setTimeout(() => { + var div = document.getElementById("content"); + var p = document.createElement("p"); + p.textContent = "delayed text"; + div.appendChild(p); + }, 3000); + </script> + </body> + <div id="content"/> +</html>
diff --git a/headless/test/headless_render_browsertest.cc b/headless/test/headless_render_browsertest.cc index 7228adc..0250a791 100644 --- a/headless/test/headless_render_browsertest.cc +++ b/headless/test/headless_render_browsertest.cc
@@ -14,6 +14,10 @@ #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" +#define HEADLESS_RENDER_BROWSERTEST(clazz) \ + class HeadlessRenderBrowserTest##clazz : public clazz {}; \ + HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessRenderBrowserTest##clazz) + namespace headless { namespace { @@ -46,21 +50,6 @@ bool IsText(const DOMNode& node) { return HasType(3, node); } -bool IsTagWithName(const char* name, const DOMNode& node) { - return IsTag(node) && HasName(name, node); -} - -std::vector<std::string> Structure(const GetSnapshotResult* snapshot) { - return ElementsView<std::string, DOMNode>( - *snapshot->GetDomNodes(), IsTag, - [](const auto& node) { return node.GetNodeName(); }); -} - -std::vector<std::string> Contents(const GetSnapshotResult* snapshot) { - return ElementsView<std::string, DOMNode>( - *snapshot->GetDomNodes(), IsText, - [](const auto& node) { return node.GetNodeValue(); }); -} std::vector<std::string> TextLayout(const GetSnapshotResult* snapshot) { return ElementsView<std::string, LayoutTreeNode>( @@ -76,6 +65,13 @@ *snapshot->GetDomNodes(), filter, [](const auto& n) { return &n; }); } +std::vector<const DOMNode*> FindTags(const GetSnapshotResult* snapshot, + const char* name = nullptr) { + return FilterDOM(snapshot, [name](const auto& n) { + return IsTag(n) && (!name || HasName(name, n)); + }); +} + size_t IndexInDOM(const GetSnapshotResult* snapshot, const DOMNode* node) { for (size_t i = 0; i < snapshot->GetDomNodes()->size(); ++i) { if (snapshot->GetDomNodes()->at(i).get() == node) @@ -113,57 +109,54 @@ class HelloWorldTest : public HeadlessRenderTest { private: GURL GetPageUrl(HeadlessDevToolsClient* client) override { - return embedded_test_server()->GetURL("/hello.html"); + return GetURL("/hello.html"); } void VerifyDom(GetSnapshotResult* dom_snapshot) override { - EXPECT_THAT(Structure(dom_snapshot), - ElementsAre("HTML", "HEAD", "BODY", "H1")); - EXPECT_THAT(Contents(dom_snapshot), - ElementsAre("Hello headless world!", "\n")); + EXPECT_THAT(FindTags(dom_snapshot), + ElementsAre(NodeName("HTML"), NodeName("HEAD"), + NodeName("BODY"), NodeName("H1"))); + EXPECT_THAT( + FilterDOM(dom_snapshot, IsText), + ElementsAre(NodeValue("Hello headless world!"), NodeValue("\n"))); EXPECT_THAT(TextLayout(dom_snapshot), ElementsAre("Hello headless world!")); - AllDone(); } }; -HEADLESS_ASYNC_DEVTOOLED_TEST_F(HelloWorldTest); +HEADLESS_RENDER_BROWSERTEST(HelloWorldTest); class TimeoutTest : public HeadlessRenderTest { private: + void OnPageRenderCompleted() override { + // Never complete. + } + GURL GetPageUrl(HeadlessDevToolsClient* client) override { - base::RunLoop run_loop; - client->GetPage()->Disable(run_loop.QuitClosure()); - base::MessageLoop::ScopedNestableTaskAllower nest_loop( - base::MessageLoop::current()); - run_loop.Run(); - return embedded_test_server()->GetURL("/hello.html"); + return GetURL("/hello.html"); } void VerifyDom(GetSnapshotResult* dom_snapshot) override { FAIL() << "Should not reach here"; } - void OnTimeout() override { AllDone(); } + void OnTimeout() override { SetTestCompleted(); } }; -HEADLESS_ASYNC_DEVTOOLED_TEST_F(TimeoutTest); +HEADLESS_RENDER_BROWSERTEST(TimeoutTest); class JavaScriptOverrideTitle_JsEnabled : public HeadlessRenderTest { private: GURL GetPageUrl(HeadlessDevToolsClient* client) override { - return embedded_test_server()->GetURL( - "/render/javascript_override_title.html"); + return GetURL("/render/javascript_override_title.html"); } void VerifyDom(GetSnapshotResult* dom_snapshot) override { - auto dom = FilterDOM( - dom_snapshot, [](const auto& n) { return IsTagWithName("TITLE", n); }); + auto dom = FindTags(dom_snapshot, "TITLE"); ASSERT_THAT(dom, ElementsAre(NodeName("TITLE"))); size_t pos = IndexInDOM(dom_snapshot, dom[0]); const DOMNode* value = GetAt(dom_snapshot, pos + 1); EXPECT_THAT(value, NodeValue("JavaScript is on")); - AllDone(); } }; -HEADLESS_ASYNC_DEVTOOLED_TEST_F(JavaScriptOverrideTitle_JsEnabled); +HEADLESS_RENDER_BROWSERTEST(JavaScriptOverrideTitle_JsEnabled); class JavaScriptOverrideTitle_JsDisabled : public HeadlessRenderTest { private: @@ -173,21 +166,18 @@ } GURL GetPageUrl(HeadlessDevToolsClient* client) override { - return embedded_test_server()->GetURL( - "/render/javascript_override_title.html"); + return GetURL("/render/javascript_override_title.html"); } void VerifyDom(GetSnapshotResult* dom_snapshot) override { - auto dom = FilterDOM( - dom_snapshot, [](const auto& n) { return IsTagWithName("TITLE", n); }); + auto dom = FindTags(dom_snapshot, "TITLE"); ASSERT_THAT(dom, ElementsAre(NodeName("TITLE"))); size_t pos = IndexInDOM(dom_snapshot, dom[0]); const DOMNode* value = GetAt(dom_snapshot, pos + 1); EXPECT_THAT(value, NodeValue("JavaScript is off")); - AllDone(); } }; -HEADLESS_ASYNC_DEVTOOLED_TEST_F(JavaScriptOverrideTitle_JsDisabled); +HEADLESS_RENDER_BROWSERTEST(JavaScriptOverrideTitle_JsDisabled); class JavaScriptConsoleErrors : public HeadlessRenderTest, public runtime::ExperimentalObserver { @@ -204,7 +194,7 @@ base::MessageLoop::ScopedNestableTaskAllower nest_loop( base::MessageLoop::current()); run_loop.Run(); - return embedded_test_server()->GetURL("/render/console_errors.html"); + return GetURL("/render/console_errors.html"); } void OnConsoleAPICalled( @@ -229,9 +219,36 @@ StartsWith("Uncaught ReferenceError: func1"), StartsWith("Uncaught ReferenceError: func2"), StartsWith("Uncaught ReferenceError: func3"))); - AllDone(); } }; -HEADLESS_ASYNC_DEVTOOLED_TEST_F(JavaScriptConsoleErrors); +HEADLESS_RENDER_BROWSERTEST(JavaScriptConsoleErrors); + +class DelayedCompletion : public HeadlessRenderTest { + private: + base::TimeTicks start_; + + GURL GetPageUrl(HeadlessDevToolsClient* client) override { + start_ = base::TimeTicks::Now(); + return GetURL("/render/delayed_completion.html"); + } + + void VerifyDom(GetSnapshotResult* dom_snapshot) override { + base::TimeTicks end = base::TimeTicks::Now(); + EXPECT_THAT( + FindTags(dom_snapshot), + ElementsAre(NodeName("HTML"), NodeName("HEAD"), NodeName("BODY"), + NodeName("SCRIPT"), NodeName("DIV"), NodeName("P"))); + auto dom = FindTags(dom_snapshot, "P"); + ASSERT_THAT(dom, ElementsAre(NodeName("P"))); + size_t pos = IndexInDOM(dom_snapshot, dom[0]); + const DOMNode* value = GetAt(dom_snapshot, pos + 1); + EXPECT_THAT(value, NodeValue("delayed text")); + // The page delays output for 3 seconds. Due to virtual time this should + // take significantly less actual time. + base::TimeDelta passed = end - start_; + EXPECT_THAT(passed.InSecondsF(), testing::Le(2.9f)); + } +}; +HEADLESS_RENDER_BROWSERTEST(DelayedCompletion); } // namespace headless
diff --git a/headless/test/headless_render_test.cc b/headless/test/headless_render_test.cc index 1934b17..0f7412b 100644 --- a/headless/test/headless_render_test.cc +++ b/headless/test/headless_render_test.cc
@@ -6,30 +6,39 @@ #include "headless/public/devtools/domains/dom_snapshot.h" #include "headless/public/headless_devtools_client.h" +#include "headless/public/util/virtual_time_controller.h" #include "net/url_request/url_request.h" #include "testing/gtest/include/gtest/gtest.h" namespace headless { +namespace { +void SetVirtualTimePolicyDoneCallback( + base::RunLoop* run_loop, + std::unique_ptr<emulation::SetVirtualTimePolicyResult>) { + run_loop->Quit(); +} +} // namespace + HeadlessRenderTest::HeadlessRenderTest() : weak_ptr_factory_(this) {} HeadlessRenderTest::~HeadlessRenderTest() {} void HeadlessRenderTest::PostRunAsynchronousTest() { // Make sure the test did complete. - EXPECT_TRUE(done_called_) << "The test did not finish. AllDone() not called."; + EXPECT_EQ(FINISHED, state_) << "The test did not finish."; } void HeadlessRenderTest::RunDevTooledTest() { EXPECT_TRUE(embedded_test_server()->Start()); - base::RunLoop run_loop; + + virtual_time_controller_ = + std::make_unique<VirtualTimeController>(devtools_client_.get()); + devtools_client_->GetPage()->GetExperimental()->AddObserver(this); devtools_client_->GetNetwork()->GetExperimental()->AddObserver(this); - devtools_client_->GetPage()->Enable(run_loop.QuitClosure()); - base::MessageLoop::ScopedNestableTaskAllower nest_loop( - base::MessageLoop::current()); - run_loop.Run(); - devtools_client_->GetNetwork()->Enable(); + devtools_client_->GetPage()->Enable(Sync()); + devtools_client_->GetNetwork()->Enable(Sync()); std::unique_ptr<headless::network::RequestPattern> match_all = headless::network::RequestPattern::Builder().SetUrlPattern("*").Build(); @@ -41,16 +50,34 @@ .Build()); GURL url = GetPageUrl(devtools_client_.get()); + + // Pause virtual time until we actually start loading content. + { + base::RunLoop run_loop; + devtools_client_->GetEmulation()->GetExperimental()->SetVirtualTimePolicy( + emulation::SetVirtualTimePolicyParams::Builder() + .SetPolicy(emulation::VirtualTimePolicy::PAUSE) + .Build(), + base::Bind(&SetVirtualTimePolicyDoneCallback, &run_loop)); + base::MessageLoop::ScopedNestableTaskAllower nest_loop( + base::MessageLoop::current()); + run_loop.Run(); + } + + state_ = STARTING; devtools_client_->GetPage()->Navigate(url.spec()); browser()->BrowserMainThread()->PostDelayedTask( FROM_HERE, base::Bind(&HeadlessRenderTest::HandleTimeout, weak_ptr_factory_.GetWeakPtr()), base::TimeDelta::FromSeconds(10)); + + // The caller will loop until FinishAsynchronousTest() is called either + // from OnGetDomSnapshotDone() or from HandleTimeout(). } void HeadlessRenderTest::OnTimeout() { - FAIL() << "Renderer timeout"; + ADD_FAILURE() << "Rendering timed out!"; } void HeadlessRenderTest::CustomizeHeadlessBrowserContext( @@ -71,14 +98,15 @@ bool canceled_by_devtools) { if (canceled_by_devtools) return; - FAIL() << "Network request failed: " << net_error << " for " - << request->url().spec(); + ADD_FAILURE() << "Network request failed: " << net_error << " for " + << request->url().spec(); } void HeadlessRenderTest::OnRequestIntercepted( const network::RequestInterceptedParams& params) { + CHECK_NE(INIT, state_); if (params.GetIsNavigationRequest()) - navigation_requested_ = true; + navigation_performed_ = true; requests_.push_back(params.Clone()); // Allow the navigation to proceed. devtools_client_->GetNetwork()->GetExperimental()->ContinueInterceptedRequest( @@ -87,8 +115,33 @@ .Build()); } -void HeadlessRenderTest::OnLoadEventFired( - const page::LoadEventFiredParams& params) { +void HeadlessRenderTest::OnLoadEventFired(const page::LoadEventFiredParams&) { + CHECK_NE(INIT, state_); + if (state_ == LOADING || state_ == STARTING) { + state_ = RENDERING; + } +} + +void HeadlessRenderTest::OnFrameStartedLoading( + const page::FrameStartedLoadingParams&) { + CHECK_NE(INIT, state_); + if (state_ == STARTING) { + state_ = LOADING; + virtual_time_controller_->GrantVirtualTimeBudget( + emulation::VirtualTimePolicy::PAUSE_IF_NETWORK_FETCHES_PENDING, 5000, + base::Closure(), + base::Bind(&HeadlessRenderTest::HandleVirtualTimeExhausted, + weak_ptr_factory_.GetWeakPtr())); + } +} + +void HeadlessRenderTest::OnPageRenderCompleted() { + CHECK(navigation_performed_); + CHECK_GE(state_, LOADING); + if (state_ >= DONE) + return; + state_ = DONE; + devtools_client_->GetDOMSnapshot()->GetExperimental()->GetSnapshot( dom_snapshot::GetSnapshotParams::Builder() .SetComputedStyleWhitelist(std::vector<std::string>()) @@ -97,19 +150,25 @@ weak_ptr_factory_.GetWeakPtr())); } +void HeadlessRenderTest::HandleVirtualTimeExhausted() { + if (state_ < DONE) { + OnPageRenderCompleted(); + } +} + void HeadlessRenderTest::OnGetDomSnapshotDone( std::unique_ptr<dom_snapshot::GetSnapshotResult> result) { - EXPECT_TRUE(navigation_requested_); + CHECK_EQ(DONE, state_); + state_ = FINISHED; + FinishAsynchronousTest(); VerifyDom(result.get()); - if (done_called_) - FinishAsynchronousTest(); } void HeadlessRenderTest::HandleTimeout() { - if (!done_called_) + if (state_ != FINISHED) { + FinishAsynchronousTest(); OnTimeout(); - EXPECT_TRUE(done_called_); - FinishAsynchronousTest(); + } } } // namespace headless
diff --git a/headless/test/headless_render_test.h b/headless/test/headless_render_test.h index 0b661e1..cc8f005 100644 --- a/headless/test/headless_render_test.h +++ b/headless/test/headless_render_test.h
@@ -9,6 +9,7 @@ #include <string> #include "base/macros.h" +#include "headless/public/devtools/domains/emulation.h" #include "headless/public/devtools/domains/network.h" #include "headless/public/devtools/domains/page.h" #include "headless/public/headless_browser.h" @@ -19,6 +20,7 @@ namespace headless { class HeadlessDevToolsClient; +class VirtualTimeController; namespace dom_snapshot { class GetSnapshotResult; } // namespace dom_snapshot @@ -32,16 +34,39 @@ void RunDevTooledTest() override; protected: + // Automatically waits in destructor until callback is called. + class Sync { + public: + Sync() {} + ~Sync() { + base::MessageLoop::ScopedNestableTaskAllower nest_loop( + base::MessageLoop::current()); + run_loop.Run(); + } + operator base::Closure() { return run_loop.QuitClosure(); } + + private: + base::RunLoop run_loop; + DISALLOW_COPY_AND_ASSIGN(Sync); + }; + HeadlessRenderTest(); ~HeadlessRenderTest() override; + void SetTestCompleted() { state_ = FINISHED; } + GURL GetURL(const std::string& path) const { + return embedded_test_server()->GetURL(path); + } + void PostRunAsynchronousTest() override; virtual GURL GetPageUrl(HeadlessDevToolsClient* client) = 0; virtual void VerifyDom(dom_snapshot::GetSnapshotResult* dom_snapshot) = 0; + + virtual void OnPageRenderCompleted(); virtual void OnTimeout(); + virtual void OverrideWebPreferences(WebPreferences* preferences); - void AllDone() { done_called_ = true; } void CustomizeHeadlessBrowserContext( HeadlessBrowserContext::Builder& builder) override; @@ -53,6 +78,8 @@ // page::ExperimentalObserver implementation: void OnLoadEventFired(const page::LoadEventFiredParams& params) override; + void OnFrameStartedLoading( + const page::FrameStartedLoadingParams& params) override; // network::ExperimentalObserver void OnRequestIntercepted( @@ -61,12 +88,23 @@ std::vector<std::unique_ptr<network::RequestInterceptedParams>> requests_; private: + void HandleVirtualTimeExhausted(); void OnGetDomSnapshotDone( std::unique_ptr<dom_snapshot::GetSnapshotResult> result); void HandleTimeout(); - bool navigation_requested_ = false; - bool done_called_ = false; + enum State { + INIT, // Setting up the client, no navigation performed yet. + STARTING, // Navigation request issued but URL not being loaded yet. + LOADING, // URL was requested but resources are not fully loaded yet. + RENDERING, // Main resources were loaded but page is still being rendered. + DONE, // Page considered to be fully rendered. + FINISHED, // Test has finished. + }; + State state_ = INIT; + + std::unique_ptr<VirtualTimeController> virtual_time_controller_; + bool navigation_performed_ = false; base::WeakPtrFactory<HeadlessRenderTest> weak_ptr_factory_;
diff --git a/ios/chrome/app/spotlight/BUILD.gn b/ios/chrome/app/spotlight/BUILD.gn index dde51d7..721505b 100644 --- a/ios/chrome/app/spotlight/BUILD.gn +++ b/ios/chrome/app/spotlight/BUILD.gn
@@ -29,11 +29,11 @@ "//ios/chrome/app/strings", "//ios/chrome/browser", "//ios/chrome/browser/bookmarks", + "//ios/chrome/browser/content_suggestions", "//ios/chrome/browser/favicon", "//ios/chrome/browser/history", "//ios/chrome/browser/suggestions", "//ios/chrome/browser/sync", - "//ios/chrome/browser/ui/ntp:ntp_internal", "//ios/chrome/common/app_group", "//ios/public/provider/chrome/browser", "//ios/public/provider/chrome/browser/spotlight",
diff --git a/ios/chrome/app/spotlight/topsites_spotlight_manager.mm b/ios/chrome/app/spotlight/topsites_spotlight_manager.mm index 7cc1cf2..36a7288 100644 --- a/ios/chrome/app/spotlight/topsites_spotlight_manager.mm +++ b/ios/chrome/app/spotlight/topsites_spotlight_manager.mm
@@ -15,12 +15,12 @@ #include "components/history/core/browser/top_sites_observer.h" #include "components/suggestions/suggestions_service.h" #include "ios/chrome/browser/bookmarks/bookmark_model_factory.h" +#import "ios/chrome/browser/content_suggestions/content_suggestions_mediator.h" #include "ios/chrome/browser/favicon/ios_chrome_large_icon_service_factory.h" #include "ios/chrome/browser/history/top_sites_factory.h" #include "ios/chrome/browser/suggestions/suggestions_service_factory.h" #include "ios/chrome/browser/sync/ios_chrome_profile_sync_service_factory.h" #include "ios/chrome/browser/sync/sync_observer_bridge.h" -#include "ios/chrome/browser/ui/ntp/google_landing_mediator.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." @@ -239,7 +239,7 @@ - (void)onMostVisitedURLsAvailable: (const history::MostVisitedURLList&)top_sites { NSUInteger sitesToIndex = - MIN(top_sites.size(), [GoogleLandingMediator maxSitesShown]); + MIN(top_sites.size(), [ContentSuggestionsMediator maxSitesShown]); for (size_t i = 0; i < sitesToIndex; i++) { const GURL& URL = top_sites[i].url; @@ -257,7 +257,8 @@ (const suggestions::SuggestionsProfile&)suggestionsProfile { size_t size = suggestionsProfile.suggestions_size(); if (size) { - NSUInteger sitesToIndex = MIN(size, [GoogleLandingMediator maxSitesShown]); + NSUInteger sitesToIndex = + MIN(size, [ContentSuggestionsMediator maxSitesShown]); for (size_t i = 0; i < sitesToIndex; i++) { const suggestions::ChromeSuggestion& suggestion = suggestionsProfile.suggestions(i);
diff --git a/ios/chrome/browser/content_suggestions/content_suggestions_coordinator.mm b/ios/chrome/browser/content_suggestions/content_suggestions_coordinator.mm index 3994ad98..faec047 100644 --- a/ios/chrome/browser/content_suggestions/content_suggestions_coordinator.mm +++ b/ios/chrome/browser/content_suggestions/content_suggestions_coordinator.mm
@@ -134,6 +134,9 @@ self.contentSuggestionsMediator.commandHandler = self.NTPMediator; self.contentSuggestionsMediator.headerProvider = self.headerController; + self.headerController.promoCanShow = + [self.contentSuggestionsMediator notificationPromo]->CanShow(); + self.metricsRecorder = [[ContentSuggestionsMetricsRecorder alloc] init]; self.metricsRecorder.delegate = self.contentSuggestionsMediator;
diff --git a/ios/chrome/browser/content_suggestions/content_suggestions_header_view_controller.h b/ios/chrome/browser/content_suggestions/content_suggestions_header_view_controller.h index 1f8f557..f276265 100644 --- a/ios/chrome/browser/content_suggestions/content_suggestions_header_view_controller.h +++ b/ios/chrome/browser/content_suggestions/content_suggestions_header_view_controller.h
@@ -43,6 +43,9 @@ // Whether the Google logo or doodle is being shown. @property(nonatomic, assign) BOOL logoIsShowing; +// |YES| if a what's new promo can be displayed. +@property(nonatomic, assign) BOOL promoCanShow; + // |YES| if its view is visible. When set to |NO| various UI updates are // ignored. @property(nonatomic, assign) BOOL isShowing;
diff --git a/ios/chrome/browser/content_suggestions/content_suggestions_header_view_controller.mm b/ios/chrome/browser/content_suggestions/content_suggestions_header_view_controller.mm index cda469b2..7975dd8c 100644 --- a/ios/chrome/browser/content_suggestions/content_suggestions_header_view_controller.mm +++ b/ios/chrome/browser/content_suggestions/content_suggestions_header_view_controller.mm
@@ -45,9 +45,6 @@ // |YES| if this consumer is has voice search enabled. @property(nonatomic, assign) BOOL voiceSearchIsEnabled; -// |YES| if a what's new promo can be displayed. -@property(nonatomic, assign) BOOL promoCanShow; - // Exposes view and methods to drive the doodle. @property(nonatomic, weak) id<LogoVendor> logoVendor; @@ -59,13 +56,6 @@ // pushed into the header view. @property(nonatomic, assign) BOOL canGoBack; -// Gets the icon of a what's new promo. -// TODO(crbug.com/694750): This should not be WhatsNewIcon. -@property(nonatomic, assign) WhatsNewIcon promoIcon; - -// Gets the text of a what's new promo. -@property(nonatomic, copy) NSString* promoText; - // The number of tabs to show in the google landing fake toolbar. @property(nonatomic, assign) int tabCount; @@ -94,8 +84,6 @@ @synthesize promoCanShow = _promoCanShow; @synthesize canGoForward = _canGoForward; @synthesize canGoBack = _canGoBack; -@synthesize promoIcon = _promoIcon; -@synthesize promoText = _promoText; @synthesize isShowing = _isShowing; @synthesize omniboxFocused = _omniboxFocused; @synthesize tabCount = _tabCount; @@ -394,18 +382,6 @@ [self updateLogoAndFakeboxDisplay]; } -- (void)setMaximumMostVisitedSitesShown: - (NSUInteger)maximumMostVisitedSitesShown { -} - -- (void)mostVisitedDataUpdated { - // Do nothing as it is handled in the ContentSuggestionsMediator. -} - -- (void)mostVisitedIconMadeAvailableAtIndex:(NSUInteger)index { - // Do nothing as it is handled in the ContentSuggestionsMediator. -} - - (void)setTabCount:(int)tabCount { _tabCount = tabCount; [self.headerView setToolbarTabCount:tabCount];
diff --git a/ios/chrome/browser/content_suggestions/content_suggestions_mediator.h b/ios/chrome/browser/content_suggestions/content_suggestions_mediator.h index 35abe31..f60d97fc 100644 --- a/ios/chrome/browser/content_suggestions/content_suggestions_mediator.h +++ b/ios/chrome/browser/content_suggestions/content_suggestions_mediator.h
@@ -73,6 +73,9 @@ // Whitelists the URL from the Most Visited sites. - (void)whitelistMostVisitedURL:(GURL)URL; +// Get the maximum number of sites shown. ++ (NSUInteger)maxSitesShown; + @end #endif // IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_MEDIATOR_H_
diff --git a/ios/chrome/browser/content_suggestions/content_suggestions_mediator.mm b/ios/chrome/browser/content_suggestions/content_suggestions_mediator.mm index 361819f..bf19030f 100644 --- a/ios/chrome/browser/content_suggestions/content_suggestions_mediator.mm +++ b/ios/chrome/browser/content_suggestions/content_suggestions_mediator.mm
@@ -175,6 +175,10 @@ self.faviconMediator.dataSink = dataSink; } ++ (NSUInteger)maxSitesShown { + return kMaxNumMostVisitedTiles; +} + #pragma mark - ContentSuggestionsDataSource - (NSArray<ContentSuggestionsSectionInformation*>*)sectionsInfo {
diff --git a/ios/chrome/browser/ui/browser_list/browser_list_session_service_impl.mm b/ios/chrome/browser/ui/browser_list/browser_list_session_service_impl.mm index 819d1a5..5d71807 100644 --- a/ios/chrome/browser/ui/browser_list/browser_list_session_service_impl.mm +++ b/ios/chrome/browser/ui/browser_list/browser_list_session_service_impl.mm
@@ -10,6 +10,7 @@ #include "base/callback.h" #include "base/logging.h" #include "base/memory/ptr_util.h" +#include "base/scoped_observer.h" #include "ios/chrome/browser/chrome_url_constants.h" #import "ios/chrome/browser/sessions/session_ios.h" #import "ios/chrome/browser/sessions/session_service_ios.h" @@ -31,54 +32,12 @@ namespace { -// BrowserListSessionServiceWebStateObserver observes a WebState and invokes -// |closure| when a new navigation item is committed. -class BrowserListSessionServiceWebStateObserver : public web::WebStateObserver { - public: - explicit BrowserListSessionServiceWebStateObserver( - const base::RepeatingClosure& closure); - ~BrowserListSessionServiceWebStateObserver() override; - - // Changes the observed WebState to |web_state|. - void ObserveWebState(web::WebState* web_state); - - // web::WebStateObserver implementation. - void NavigationItemCommitted( - web::WebState* web_state, - const web::LoadCommittedDetails& load_details) override; - - private: - base::RepeatingClosure closure_; - - DISALLOW_COPY_AND_ASSIGN(BrowserListSessionServiceWebStateObserver); -}; - -BrowserListSessionServiceWebStateObserver:: - BrowserListSessionServiceWebStateObserver( - const base::RepeatingClosure& closure) - : WebStateObserver(), closure_(closure) { - DCHECK(!closure_.is_null()); -} - -BrowserListSessionServiceWebStateObserver:: - ~BrowserListSessionServiceWebStateObserver() = default; - -void BrowserListSessionServiceWebStateObserver::ObserveWebState( - web::WebState* web_state) { - WebStateObserver::Observe(web_state); -} - -void BrowserListSessionServiceWebStateObserver::NavigationItemCommitted( - web::WebState* web_state, - const web::LoadCommittedDetails& load_details) { - closure_.Run(); -} - // BrowserListSessionServiceWebStateListObserver observes a WebStateList and // invokes |closure| when the active WebState changes or a navigation item is // committed in the active WebState. class BrowserListSessionServiceWebStateListObserver - : public WebStateListObserver { + : public WebStateListObserver, + public web::WebStateObserver { public: BrowserListSessionServiceWebStateListObserver( WebStateList* web_state_list, @@ -92,10 +51,16 @@ int active_index, bool user_action) override; + // web::WebStateObserver implementation. + void NavigationItemCommitted( + web::WebState* web_state, + const web::LoadCommittedDetails& load_details) override; + void WebStateDestroyed(web::WebState* web_state) override; + private: WebStateList* web_state_list_; base::RepeatingClosure closure_; - BrowserListSessionServiceWebStateObserver observer_; + ScopedObserver<web::WebState, web::WebStateObserver> scoped_observer_; DISALLOW_COPY_AND_ASSIGN(BrowserListSessionServiceWebStateListObserver); }; @@ -104,19 +69,20 @@ BrowserListSessionServiceWebStateListObserver( WebStateList* web_state_list, const base::RepeatingClosure& closure) - : web_state_list_(web_state_list), closure_(closure), observer_(closure) { + : web_state_list_(web_state_list), + closure_(closure), + scoped_observer_(this) { DCHECK(!closure_.is_null()); web_state_list_->AddObserver(this); if (web_state_list_->active_index() != WebStateList::kInvalidIndex) { - WebStateActivatedAt(web_state_list_, nullptr, - web_state_list_->GetActiveWebState(), - web_state_list_->active_index(), false); + scoped_observer_.Add(web_state_list_->GetActiveWebState()); } } BrowserListSessionServiceWebStateListObserver:: ~BrowserListSessionServiceWebStateListObserver() { web_state_list_->RemoveObserver(this); + scoped_observer_.RemoveAll(); } void BrowserListSessionServiceWebStateListObserver::WebStateActivatedAt( @@ -125,9 +91,24 @@ web::WebState* new_web_state, int active_index, bool user_action) { - if (old_web_state) + if (old_web_state) { + scoped_observer_.Remove(old_web_state); closure_.Run(); - observer_.ObserveWebState(new_web_state); + } + if (new_web_state) { + scoped_observer_.Add(new_web_state); + } +} + +void BrowserListSessionServiceWebStateListObserver::NavigationItemCommitted( + web::WebState* web_state, + const web::LoadCommittedDetails& load_details) { + closure_.Run(); +} + +void BrowserListSessionServiceWebStateListObserver::WebStateDestroyed( + web::WebState* web_state) { + NOTREACHED(); } // BrowserListSessionServiceBrowserListObserver observes a BrowserList and
diff --git a/ios/chrome/browser/ui/ntp/BUILD.gn b/ios/chrome/browser/ui/ntp/BUILD.gn index 1d4c8ed..065a0bae2 100644 --- a/ios/chrome/browser/ui/ntp/BUILD.gn +++ b/ios/chrome/browser/ui/ntp/BUILD.gn
@@ -15,7 +15,6 @@ source_set("ntp_header") { configs += [ "//build/config/compiler:enable_arc" ] sources = [ - "google_landing_data_source.h", "new_tab_page_header_view.h", "new_tab_page_header_view.mm", "new_tab_page_toolbar_controller.h",
diff --git a/ios/chrome/browser/ui/ntp/google_landing_consumer.h b/ios/chrome/browser/ui/ntp/google_landing_consumer.h index 87768db..c51e6724 100644 --- a/ios/chrome/browser/ui/ntp/google_landing_consumer.h +++ b/ios/chrome/browser/ui/ntp/google_landing_consumer.h
@@ -24,20 +24,6 @@ // |YES| if this consumer is has voice search enabled. - (void)setVoiceSearchIsEnabled:(BOOL)voiceSearchIsEnabled; -// Sets the maximum number of sites shown. -- (void)setMaximumMostVisitedSitesShown: - (NSUInteger)maximumMostVisitedSitesShown; - -// Sets the text of a what's new promo. -- (void)setPromoText:(NSString*)promoText; - -// Sets the icon of a what's new promo. -// TODO(crbug.com/694750): This should not be WhatsNewIcon. -- (void)setPromoIcon:(WhatsNewIcon)promoIcon; - -// |YES| if a what's new promo can be displayed. -- (void)setPromoCanShow:(BOOL)promoCanShow; - // The number of tabs to show in the google landing fake toolbar. - (void)setTabCount:(int)tabCount; @@ -47,14 +33,6 @@ // |YES| if the google landing toolbar can show the back arrow. - (void)setCanGoBack:(BOOL)canGoBack; -// TODO(crbug.com/694750): This should be replaced with consumer suitable data -// type property. -// Tells the consumer to that most visited data updated. -- (void)mostVisitedDataUpdated; - -// Tells the consumer a most visited icon was updated. -- (void)mostVisitedIconMadeAvailableAtIndex:(NSUInteger)index; - // TODO(crbug.com/694750): These two calls can be made with dispatcher instead. // The location bar has lost focus. - (void)locationBarResignsFirstResponder;
diff --git a/ios/chrome/browser/ui/ntp/google_landing_data_source.h b/ios/chrome/browser/ui/ntp/google_landing_data_source.h deleted file mode 100644 index f223377..0000000 --- a/ios/chrome/browser/ui/ntp/google_landing_data_source.h +++ /dev/null
@@ -1,75 +0,0 @@ -// Copyright 2017 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_UI_NTP_GOOGLE_LANDING_DATA_SOURCE_H_ -#define IOS_CHROME_BROWSER_UI_NTP_GOOGLE_LANDING_DATA_SOURCE_H_ - -#import <Foundation/Foundation.h> -#import <UIKit/UIKit.h> - -#include "components/ntp_tiles/ntp_tile.h" -#import "ios/chrome/browser/ui/favicon/favicon_attributes.h" -#include "url/gurl.h" - -@class FaviconAttributes; -class ReadingListModel; -class LargeIconCache; -namespace favicon { -class LargeIconService; -} - -// DataSource for the google landing controller. -// TODO(crbug.com/694750): Most everything here can be moved to dispatcher. -@protocol GoogleLandingDataSource - -// Removes a blacklisted URL in both |_mostVisitedData|. -- (void)removeBlacklistedURL:(const GURL&)url; - -// Adds URL to the blacklist in both |_mostVisitedData|. -- (void)addBlacklistedURL:(const GURL&)url; - -// Logs a histogram due to a Most Visited item being opened. -- (void)logMostVisitedClick:(const NSUInteger)visitedIndex - faviconAttributes:(FaviconAttributes*)faviconAttributes; - -// Called when a what's new promo is viewed. -- (void)promoViewed; - -// Called when a what's new promo is tapped. -- (void)promoTapped; - -// TODO(crbug.com/694750): The following two methods should be moved to the -// consumer, and converted into types more suitable for a consumer. -// Gets an a most visited NTP tile at |index|. -- (ntp_tiles::NTPTile)mostVisitedAtIndex:(NSUInteger)index; - -// Gets the number of most visited entries. -- (NSUInteger)mostVisitedSize; - -// TODO(crbug.com/694750): The following three properties will be removed in -// subsequent CLs, with data provided via GoogleDataConsumer into types more -// suitable for a consumer. - -// Gets the reading list model. -- (ReadingListModel*)readingListModel; - -// Gets the large icon cache. -- (LargeIconCache*)largeIconCache; - -// Gets the large icon service. -- (favicon::LargeIconService*)largeIconService; - -// Asynchronously gets the favicon for |URL| with size |size| and calls -// |imageCallback| with the |favicon| image if it's valid, or |fallbackCallback| -// if there is valid fallback data with the |textColor| and |backgroundColor| -// for the fallback icon to use. |isDefaultColor| is true if a default color -// should be used instead of |backgroundColor|. -- (void)getFaviconForPageURL:(const GURL&)URL - size:(CGFloat)size - useCache:(BOOL)useCache - callback:(void (^)(FaviconAttributes*))callback; - -@end - -#endif // IOS_CHROME_BROWSER_UI_NTP_GOOGLE_LANDING_DATA_SOURCE_H_
diff --git a/ios/chrome/browser/ui/ntp/google_landing_mediator.h b/ios/chrome/browser/ui/ntp/google_landing_mediator.h index 09d23af..6c6257e9 100644 --- a/ios/chrome/browser/ui/ntp/google_landing_mediator.h +++ b/ios/chrome/browser/ui/ntp/google_landing_mediator.h
@@ -7,8 +7,6 @@ #import <Foundation/Foundation.h> -#import "ios/chrome/browser/ui/ntp/google_landing_data_source.h" - @protocol BrowserCommands; @protocol GoogleLandingConsumer; @protocol OmniboxFocuser; @@ -20,7 +18,7 @@ } // A mediator object that provides various data sources for google landing. -@interface GoogleLandingMediator : NSObject<GoogleLandingDataSource> +@interface GoogleLandingMediator : NSObject - (nullable instancetype) initWithBrowserState:(nonnull ios::ChromeBrowserState*)browserState @@ -40,9 +38,6 @@ // Stop listening to any observers and other cleanup functionality. - (void)shutdown; -// Get the maximum number of sites shown. -+ (NSUInteger)maxSitesShown; - @end #endif // IOS_CHROME_BROWSER_UI_NTP_GOOGLE_LANDING_MEDIATOR_H_
diff --git a/ios/chrome/browser/ui/ntp/google_landing_mediator.mm b/ios/chrome/browser/ui/ntp/google_landing_mediator.mm index 02c6c7d9..26d82c6 100644 --- a/ios/chrome/browser/ui/ntp/google_landing_mediator.mm +++ b/ios/chrome/browser/ui/ntp/google_landing_mediator.mm
@@ -49,21 +49,6 @@ #error "This file requires ARC support." #endif -using base::UserMetricsAction; - -namespace { - -// The What's New promo command that shows the Bookmarks Manager. -const char kBookmarkCommand[] = "bookmark"; - -// The What's New promo command that launches Rate This App. -const char kRateThisAppCommand[] = "ratethisapp"; - -const CGFloat kFaviconMinSize = 32; -const NSInteger kMaxNumMostVisitedFavicons = 8; - -} // namespace - @interface GoogleLandingMediator (UsedBySearchEngineObserver) // Check to see if the logo visibility should change. - (void)updateShowLogo; @@ -101,15 +86,10 @@ } // namespace google_landing -@interface GoogleLandingMediator ()<GoogleLandingDataSource, - MostVisitedSitesObserving, - WebStateListObserving> { +@interface GoogleLandingMediator ()<WebStateListObserving> { // The ChromeBrowserState associated with this mediator. ios::ChromeBrowserState* _browserState; // Weak. - // |YES| if impressions were logged already and shouldn't be logged again. - BOOL _recordedPageImpression; - // Controller to fetch and show doodles or a default Google logo. id<LogoVendor> _doodleController; @@ -117,33 +97,10 @@ std::unique_ptr<google_landing::SearchEngineObserver> _observer; TemplateURLService* _templateURLService; // weak - // A MostVisitedSites::Observer bridge object to get notified of most visited - // sites changes. - std::unique_ptr<ntp_tiles::MostVisitedSitesObserverBridge> - _mostVisitedObserverBridge; - - std::unique_ptr<ntp_tiles::MostVisitedSites> _mostVisitedSites; - - // Most visited data from the MostVisitedSites service currently in use. - ntp_tiles::NTPTilesVector _mostVisitedData; - - // Most visited data from the MostVisitedSites service (copied upon receiving - // the callback), not yet used by the collection. It will be used after a user - // interaction. - ntp_tiles::NTPTilesVector _freshMostVisitedData; - - // Most visited data used for logging the tiles impression. The data are - // copied when receiving the first non-empty data. This copy is used to make - // sure only the data received the first time are logged, and only once. - ntp_tiles::NTPTilesVector _mostVisitedDataForLogging; - // Observes the WebStateList so that this mediator can update the UI when the // active WebState changes. std::unique_ptr<WebStateListObserverBridge> _webStateListObserver; - // What's new promo. - std::unique_ptr<NotificationPromoWhatsNew> _notificationPromo; - // Used to cancel tasks for the LargeIconService. base::CancelableTaskTracker _cancelable_task_tracker; } @@ -182,8 +139,6 @@ [self.consumer setVoiceSearchIsEnabled:ios::GetChromeBrowserProvider() ->GetVoiceSearchProvider() ->IsVoiceSearchEnabled()]; - [self.consumer - setMaximumMostVisitedSitesShown:[GoogleLandingMediator maxSitesShown]]; [self.consumer setTabCount:self.webStateList->count()]; web::WebState* webState = _webStateList->GetActiveWebState(); if (webState) { @@ -203,16 +158,6 @@ [_consumer setLogoVendor:_doodleController]; [self updateShowLogo]; - // Set up most visited sites. This call may have the side effect of - // triggering -onMostVisitedURLsAvailable immediately, which can load the - // view before dataSource is set. - _mostVisitedSites = - IOSMostVisitedSitesFactory::NewForBrowserState(_browserState); - _mostVisitedObserverBridge.reset( - new ntp_tiles::MostVisitedSitesObserverBridge(self)); - _mostVisitedSites->SetMostVisitedURLsObserver( - _mostVisitedObserverBridge.get(), [GoogleLandingMediator maxSitesShown]); - // Set up notifications; NSNotificationCenter* defaultCenter = [NSNotificationCenter defaultCenter]; [defaultCenter addObserver:self.consumer @@ -223,15 +168,6 @@ selector:@selector(locationBarResignsFirstResponder) name:kLocationBarResignsFirstResponderNotification object:nil]; - - // Set up what's new. - _notificationPromo.reset( - new NotificationPromoWhatsNew(GetApplicationContext()->GetLocalState())); - _notificationPromo->Init(); - [self.consumer setPromoText:[base::SysUTF8ToNSString( - _notificationPromo->promo_text()) copy]]; - [self.consumer setPromoIcon:_notificationPromo->icon()]; - [self.consumer setPromoCanShow:_notificationPromo->CanShow()]; } - (void)updateShowLogo { @@ -246,106 +182,6 @@ [self.consumer setLogoIsShowing:showLogo]; } -+ (NSUInteger)maxSitesShown { - return kMaxNumMostVisitedFavicons; -} - -#pragma mark - MostVisitedSitesObserving - -- (void)onMostVisitedURLsAvailable:(const ntp_tiles::NTPTilesVector&)data { - if (_mostVisitedData.size() > 0) { - // If some content is already displayed to the user, do not update it to - // prevent updating the all the tiles without any action from the user. - _freshMostVisitedData = data; - return; - } - - _mostVisitedData = data; - [self.consumer mostVisitedDataUpdated]; - - if (data.size() && !_recordedPageImpression) { - _recordedPageImpression = YES; - _mostVisitedDataForLogging = data; - ntp_tiles::metrics::RecordPageImpression(data.size()); - } -} - -- (void)onIconMadeAvailable:(const GURL&)siteUrl { - for (size_t i = 0; i < _mostVisitedData.size(); ++i) { - const ntp_tiles::NTPTile& ntpTile = _mostVisitedData[i]; - if (ntpTile.url == siteUrl) { - [self.consumer mostVisitedIconMadeAvailableAtIndex:i]; - break; - } - } -} - -- (void)getFaviconForPageURL:(const GURL&)URL - size:(CGFloat)size - useCache:(BOOL)useCache - callback:(void (^)(FaviconAttributes*))callback { - __weak GoogleLandingMediator* weakSelf = self; - GURL localURL = URL; // Persisting for use in block below. - void (^faviconBlock)(const favicon_base::LargeIconResult&) = ^( - const favicon_base::LargeIconResult& result) { - // TODO(crbug.com/773627): Use FaviconAttributesProvider just like many - // other mediators. - FaviconAttributesWithPayload* attributes = nil; - - if (result.bitmap.is_valid()) { - scoped_refptr<base::RefCountedMemory> data = - result.bitmap.bitmap_data.get(); - UIImage* favicon = [UIImage - imageWithData:[NSData dataWithBytes:data->front() length:data->size()] - scale:[UIScreen mainScreen].scale]; - attributes = [FaviconAttributesWithPayload attributesWithImage:favicon]; - attributes.iconType = result.bitmap.icon_type; - if (callback) { - callback(attributes); - } - } else if (result.fallback_icon_style) { - UIColor* backgroundColor = skia::UIColorFromSkColor( - result.fallback_icon_style->background_color); - UIColor* textColor = - skia::UIColorFromSkColor(result.fallback_icon_style->text_color); - BOOL isDefaultColor = - result.fallback_icon_style->is_default_background_color; - NSString* monogram = - base::SysUTF16ToNSString(favicon::GetFallbackIconText(localURL)); - attributes = - [FaviconAttributesWithPayload attributesWithMonogram:monogram - textColor:textColor - backgroundColor:backgroundColor - defaultBackgroundColor:isDefaultColor]; - if (callback) { - callback(attributes); - } - } - - GoogleLandingMediator* strongSelf = weakSelf; - if (strongSelf) { - if (result.bitmap.is_valid() || result.fallback_icon_style) { - [strongSelf largeIconCache]->SetCachedResult(localURL, result); - } - [strongSelf faviconWithAttributes:attributes fetchedForURL:localURL]; - } - }; - - if (useCache) { - std::unique_ptr<favicon_base::LargeIconResult> cached_result = - [self largeIconCache]->GetCachedResult(URL); - if (cached_result) { - faviconBlock(*cached_result); - } - } - - CGFloat faviconSize = [UIScreen mainScreen].scale * size; - CGFloat faviconMinSize = [UIScreen mainScreen].scale * kFaviconMinSize; - [self largeIconService]->GetLargeIconOrFallbackStyle( - URL, faviconMinSize, faviconSize, base::BindBlockArc(faviconBlock), - &_cancelable_task_tracker); -} - #pragma mark - WebStateListObserving - (void)webStateList:(WebStateList*)webStateList @@ -377,106 +213,4 @@ } } -#pragma mark - GoogleLandingDataSource - -- (void)addBlacklistedURL:(const GURL&)url { - _mostVisitedSites->AddOrRemoveBlacklistedUrl(url, true); - [self useFreshData]; -} - -- (void)removeBlacklistedURL:(const GURL&)url { - _mostVisitedSites->AddOrRemoveBlacklistedUrl(url, false); - [self useFreshData]; -} - -- (ntp_tiles::NTPTile)mostVisitedAtIndex:(NSUInteger)index { - return _mostVisitedData[index]; -} - -- (NSUInteger)mostVisitedSize { - return _mostVisitedData.size(); -} - -- (void)logMostVisitedClick:(const NSUInteger)visitedIndex - faviconAttributes:(FaviconAttributes*)faviconAttributes { - new_tab_page_uma::RecordAction( - _browserState, new_tab_page_uma::ACTION_OPENED_MOST_VISITED_ENTRY); - base::RecordAction(UserMetricsAction("MobileNTPMostVisited")); - const ntp_tiles::NTPTile& tile = _mostVisitedData[visitedIndex]; - RecordNTPTileClick(visitedIndex, tile.source, tile.title_source, - faviconAttributes, tile.data_generation_time, tile.url); -} - -- (ReadingListModel*)readingListModel { - return ReadingListModelFactory::GetForBrowserState(_browserState); -} - -- (LargeIconCache*)largeIconCache { - return IOSChromeLargeIconCacheFactory::GetForBrowserState(_browserState); -} - -- (favicon::LargeIconService*)largeIconService { - return IOSChromeLargeIconServiceFactory::GetForBrowserState(_browserState); -} - -- (void)promoViewed { - DCHECK(_notificationPromo); - _notificationPromo->HandleViewed(); - [self.consumer setPromoCanShow:_notificationPromo->CanShow()]; -} - -// TODO(crbug.com/761096) : Promo handling should be DRY and tested. -- (void)promoTapped { - DCHECK(_notificationPromo); - _notificationPromo->HandleClosed(); - [self.consumer setPromoCanShow:_notificationPromo->CanShow()]; - - if (_notificationPromo->IsURLPromo()) { - [self.dispatcher webPageOrderedOpen:_notificationPromo->url() - referrer:web::Referrer() - inBackground:NO - appendTo:kCurrentTab]; - return; - } - - if (_notificationPromo->IsChromeCommandPromo()) { - std::string command = _notificationPromo->command(); - if (command == kBookmarkCommand) { - [self.dispatcher showBookmarksManager]; - } else if (command == kRateThisAppCommand) { - [self.dispatcher showRateThisAppDialog]; - } else { - NOTREACHED() << "Promo command is not valid."; - } - return; - } - NOTREACHED() << "Promo type is neither URL or command."; -} - -#pragma mark - Private - -// If there is some fresh most visited tiles, they become the current tiles and -// the consumer gets notified. -- (void)useFreshData { - _mostVisitedData = _freshMostVisitedData; - [self.consumer mostVisitedDataUpdated]; -} - -// If it is the first time we see the favicon corresponding to |URL|, we log the -// |attributes| impression. -- (void)faviconWithAttributes:(FaviconAttributes*)attributes - fetchedForURL:(const GURL&)URL { - for (size_t i = 0; i < _mostVisitedDataForLogging.size(); ++i) { - ntp_tiles::NTPTile& ntpTile = _mostVisitedDataForLogging[i]; - if (ntpTile.url == URL) { - RecordNTPTileImpression(i, ntpTile.source, ntpTile.title_source, - attributes, ntpTile.data_generation_time, - ntpTile.url); - // Reset the URL to be sure to log the impression only once. - ntpTile.url = GURL(); - break; - } - } -} - @end
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_header_view.mm b/ios/chrome/browser/ui/ntp/new_tab_page_header_view.mm index aa4aa53..5ae7855 100644 --- a/ios/chrome/browser/ui/ntp/new_tab_page_header_view.mm +++ b/ios/chrome/browser/ui/ntp/new_tab_page_header_view.mm
@@ -9,7 +9,6 @@ #import "ios/chrome/browser/tabs/tab_model_observer.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_utils.h" #import "ios/chrome/browser/ui/image_util.h" -#import "ios/chrome/browser/ui/ntp/google_landing_data_source.h" #import "ios/chrome/browser/ui/ntp/new_tab_page_header_constants.h" #import "ios/chrome/browser/ui/ntp/new_tab_page_toolbar_controller.h" #import "ios/chrome/browser/ui/toolbar/public/toolbar_utils.h"
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_toolbar_controller.mm b/ios/chrome/browser/ui/ntp/new_tab_page_toolbar_controller.mm index d17080b..5afcf9c 100644 --- a/ios/chrome/browser/ui/ntp/new_tab_page_toolbar_controller.mm +++ b/ios/chrome/browser/ui/ntp/new_tab_page_toolbar_controller.mm
@@ -11,7 +11,6 @@ #include "components/toolbar/toolbar_model.h" #import "ios/chrome/browser/ui/commands/application_commands.h" #import "ios/chrome/browser/ui/commands/browser_commands.h" -#import "ios/chrome/browser/ui/ntp/google_landing_data_source.h" #import "ios/chrome/browser/ui/rtl_geometry.h" #import "ios/chrome/browser/ui/toolbar/omnibox_focuser.h" #import "ios/chrome/browser/ui/toolbar/public/toolbar_controller_constants.h"
diff --git a/ios/chrome/browser/ui/sad_tab/sad_tab_legacy_coordinator.mm b/ios/chrome/browser/ui/sad_tab/sad_tab_legacy_coordinator.mm index 4ac7e5e4..523dc14 100644 --- a/ios/chrome/browser/ui/sad_tab/sad_tab_legacy_coordinator.mm +++ b/ios/chrome/browser/ui/sad_tab/sad_tab_legacy_coordinator.mm
@@ -27,17 +27,18 @@ #pragma mark - SadTabTabHelperDelegate - (void)sadTabTabHelper:(SadTabTabHelper*)tabHelper - presentSadTabForRepeatedFailure:(BOOL)repeatedFailure { + presentSadTabForWebState:(web::WebState*)webState + repeatedFailure:(BOOL)repeatedFailure { // Create a SadTabView so |webstate| presents it. SadTabView* sadTabview = [[SadTabView alloc] initWithMode:repeatedFailure ? SadTabViewMode::FEEDBACK : SadTabViewMode::RELOAD - navigationManager:tabHelper->web_state()->GetNavigationManager()]; + navigationManager:webState->GetNavigationManager()]; sadTabview.dispatcher = static_cast<id<ApplicationCommands>>(self.dispatcher); sadTabview.actionDelegate = self; CRWContentView* contentView = [[CRWGenericContentView alloc] initWithView:sadTabview]; - tabHelper->web_state()->ShowTransientContentView(contentView); + webState->ShowTransientContentView(contentView); } @end
diff --git a/ios/chrome/browser/ui/settings/block_popups_collection_view_controller.mm b/ios/chrome/browser/ui/settings/block_popups_collection_view_controller.mm index b617751..63c5805 100644 --- a/ios/chrome/browser/ui/settings/block_popups_collection_view_controller.mm +++ b/ios/chrome/browser/ui/settings/block_popups_collection_view_controller.mm
@@ -180,6 +180,9 @@ _exceptions.Remove(urlIndex, NULL); } + // Update the edit button appearance, in case all exceptions were removed. + [self updateEditButton]; + // Must call super at the end of the child implementation. [super collectionView:collectionView willDeleteItemsAtIndexPaths:indexPaths]; }
diff --git a/ios/chrome/browser/web/sad_tab_tab_helper.h b/ios/chrome/browser/web/sad_tab_tab_helper.h index 808b2785..92699c36 100644 --- a/ios/chrome/browser/web/sad_tab_tab_helper.h +++ b/ios/chrome/browser/web/sad_tab_tab_helper.h
@@ -78,6 +78,10 @@ // to be considered a repeat failure. static const double kDefaultRepeatFailureInterval; + // The WebState this instance is observing. Will be null after + // WebStateDestroyed has been called. + web::WebState* web_state_ = nullptr; + // Stores the last URL that caused a renderer crash, // used to detect repeated crashes. GURL last_failed_url_;
diff --git a/ios/chrome/browser/web/sad_tab_tab_helper.mm b/ios/chrome/browser/web/sad_tab_tab_helper.mm index 9da2af8..4f68a64 100644 --- a/ios/chrome/browser/web/sad_tab_tab_helper.mm +++ b/ios/chrome/browser/web/sad_tab_tab_helper.mm
@@ -7,6 +7,7 @@ #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> +#include "base/logging.h" #include "base/memory/ptr_util.h" #include "base/strings/sys_string_conversions.h" #include "ios/chrome/browser/chrome_url_constants.h" @@ -38,14 +39,16 @@ SadTabTabHelper::SadTabTabHelper(web::WebState* web_state, double repeat_failure_interval, id<SadTabTabHelperDelegate> delegate) - : web::WebStateObserver(web_state), + : web_state_(web_state), repeat_failure_interval_(repeat_failure_interval), delegate_(delegate) { + web_state_->AddObserver(this); AddApplicationDidBecomeActiveObserver(); } SadTabTabHelper::~SadTabTabHelper() { DCHECK(!application_did_become_active_observer_); + DCHECK(!web_state_); } void SadTabTabHelper::CreateForWebState(web::WebState* web_state, @@ -73,6 +76,7 @@ } void SadTabTabHelper::WasShown(web::WebState* web_state) { + DCHECK_EQ(web_state_, web_state); if (requires_reload_on_becoming_visible_) { ReloadTab(); requires_reload_on_becoming_visible_ = false; @@ -80,6 +84,7 @@ } void SadTabTabHelper::RenderProcessGone(web::WebState* web_state) { + DCHECK_EQ(web_state_, web_state); if (!web_state->IsVisible()) { requires_reload_on_becoming_visible_ = true; return; @@ -99,6 +104,7 @@ void SadTabTabHelper::DidFinishNavigation( web::WebState* web_state, web::NavigationContext* navigation_context) { + DCHECK_EQ(web_state_, web_state); if (navigation_context->GetUrl().host() == kChromeUICrashHost && navigation_context->GetUrl().scheme() == kChromeUIScheme) { PresentSadTab(navigation_context->GetUrl()); @@ -106,6 +112,9 @@ } void SadTabTabHelper::WebStateDestroyed(web::WebState* web_state) { + DCHECK_EQ(web_state_, web_state); + web_state_->RemoveObserver(this); + web_state_ = nullptr; RemoveApplicationDidBecomeActiveObserver(); } @@ -120,22 +129,23 @@ seconds_since_last_failure < repeat_failure_interval_); [delegate_ sadTabTabHelper:this - presentSadTabForRepeatedFailure:repeated_failure]; + presentSadTabForWebState:web_state_ + repeatedFailure:repeated_failure]; last_failed_url_ = url_causing_failure; last_failed_timer_ = base::MakeUnique<base::ElapsedTimer>(); } void SadTabTabHelper::ReloadTab() { - PagePlaceholderTabHelper::FromWebState(web_state()) + PagePlaceholderTabHelper::FromWebState(web_state_) ->AddPlaceholderForNextNavigation(); - web_state()->GetNavigationManager()->LoadIfNecessary(); + web_state_->GetNavigationManager()->LoadIfNecessary(); } void SadTabTabHelper::OnAppDidBecomeActive() { if (!requires_reload_on_becoming_active_) return; - if (web_state()->IsVisible()) { + if (web_state_->IsVisible()) { ReloadTab(); } else { requires_reload_on_becoming_visible_ = true;
diff --git a/ios/chrome/browser/web/sad_tab_tab_helper_delegate.h b/ios/chrome/browser/web/sad_tab_tab_helper_delegate.h index 84275d5..bb1a5eb 100644 --- a/ios/chrome/browser/web/sad_tab_tab_helper_delegate.h +++ b/ios/chrome/browser/web/sad_tab_tab_helper_delegate.h
@@ -9,12 +9,17 @@ class SadTabTabHelper; +namespace web { +class WebState; +} + // Delegate for SadTabTabHelper. @protocol SadTabTabHelperDelegate<NSObject> // Asks the delegate to present a SadTabView. - (void)sadTabTabHelper:(SadTabTabHelper*)tabHelper - presentSadTabForRepeatedFailure:(BOOL)repeatedFailure; + presentSadTabForWebState:(web::WebState*)webState + repeatedFailure:(BOOL)repeatedFailure; @end
diff --git a/ios/chrome/browser/web/sad_tab_tab_helper_unittest.mm b/ios/chrome/browser/web/sad_tab_tab_helper_unittest.mm index ef6d10a..70a78311 100644 --- a/ios/chrome/browser/web/sad_tab_tab_helper_unittest.mm +++ b/ios/chrome/browser/web/sad_tab_tab_helper_unittest.mm
@@ -33,11 +33,12 @@ @synthesize repeatedFailure = _repeatedFailure; - (void)sadTabTabHelper:(SadTabTabHelper*)tabHelper - presentSadTabForRepeatedFailure:(BOOL)repeatedFailure { + presentSadTabForWebState:(web::WebState*)webState + repeatedFailure:(BOOL)repeatedFailure { self.repeatedFailure = repeatedFailure; CRWContentView* contentView = [[CRWGenericContentView alloc] initWithView:[[UIView alloc] initWithFrame:CGRectZero]]; - tabHelper->web_state()->ShowTransientContentView(contentView); + webState->ShowTransientContentView(contentView); } @end
diff --git a/ios/web/test/web_int_test.h b/ios/web/test/web_int_test.h index 4bd312eb..65f8451 100644 --- a/ios/web/test/web_int_test.h +++ b/ios/web/test/web_int_test.h
@@ -8,6 +8,7 @@ #import <WebKit/WebKit.h> #import "base/ios/block_types.h" +#include "base/macros.h" #import "ios/web/public/navigation_manager.h" #import "ios/web/public/test/fakes/test_web_state_delegate.h" #include "ios/web/public/test/web_test.h" @@ -17,8 +18,6 @@ namespace web { -class IntTestWebStateObserver; - // A test fixture for integration tests that need to bring up the HttpServer. class WebIntTest : public WebTest { protected: @@ -69,8 +68,8 @@ private: // WebState used to load pages. std::unique_ptr<WebState> web_state_; - // WebStateObserver used to wait for page loads. - std::unique_ptr<IntTestWebStateObserver> observer_; + + DISALLOW_COPY_AND_ASSIGN(WebIntTest); }; } // namespace web
diff --git a/ios/web/test/web_int_test.mm b/ios/web/test/web_int_test.mm index e692b2a..93feb74b 100644 --- a/ios/web/test/web_int_test.mm +++ b/ios/web/test/web_int_test.mm
@@ -6,6 +6,7 @@ #import "base/ios/block_types.h" #include "base/memory/ptr_util.h" +#include "base/scoped_observer.h" #import "base/test/ios/wait_util.h" #import "ios/web/public/test/http_server/http_server.h" #import "ios/web/public/test/js_test_util.h" @@ -21,16 +22,10 @@ #pragma mark - IntTestWebStateObserver // WebStateObserver class that is used to track when page loads finish. -class IntTestWebStateObserver : public web::WebStateObserver { +class IntTestWebStateObserver : public WebStateObserver { public: - IntTestWebStateObserver(web::WebState* web_state) - : web::WebStateObserver(web_state), page_loaded_(false) {} - // Instructs the observer to listen for page loads for |url|. - void ExpectPageLoad(const GURL& url) { - expected_url_ = url; - page_loaded_ = false; - } + explicit IntTestWebStateObserver(const GURL& url) : expected_url_(url) {} // Whether |expected_url_| has been loaded successfully. bool IsExpectedPageLoaded() { return page_loaded_; } @@ -44,9 +39,13 @@ page_loaded_ = true; } + void WebStateDestroyed(web::WebState* web_state) override { NOTREACHED(); } + private: GURL expected_url_; - bool page_loaded_; + bool page_loaded_ = false; + + DISALLOW_COPY_AND_ASSIGN(IntTestWebStateObserver); }; #pragma mark - WebIntTest @@ -95,11 +94,18 @@ void WebIntTest::ExecuteBlockAndWaitForLoad(const GURL& url, ProceduralBlock block) { DCHECK(block); - observer_ = base::MakeUnique<IntTestWebStateObserver>(web_state()); - observer_->ExpectPageLoad(url); + + IntTestWebStateObserver observer(url); + ScopedObserver<WebState, WebStateObserver> scoped_observer(&observer); + scoped_observer.Add(web_state()); + block(); + + // Need to use a pointer to |observer| as the block wants to capture it by + // value (even if marked with __block) which would not work. + IntTestWebStateObserver* observer_ptr = &observer; base::test::ios::WaitUntilCondition(^bool { - return observer_->IsExpectedPageLoaded(); + return observer_ptr->IsExpectedPageLoaded(); }); }
diff --git a/ios/web/web_state/favicon_callbacks_inttest.mm b/ios/web/web_state/favicon_callbacks_inttest.mm index 6875c2e..c3314107 100644 --- a/ios/web/web_state/favicon_callbacks_inttest.mm +++ b/ios/web/web_state/favicon_callbacks_inttest.mm
@@ -2,10 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "base/logging.h" #include "base/memory/ptr_util.h" #include "ios/web/public/favicon_url.h" #import "ios/web/public/test/web_test_with_web_state.h" -#include "ios/web/public/web_state/web_state_observer.h" +#import "ios/web/public/web_state/web_state.h" +#import "ios/web/public/web_state/web_state_observer.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." @@ -16,10 +18,10 @@ namespace { // Observes and waits for FaviconUrlUpdated call. -class FaviconUrlObserver : public web::WebStateObserver { +class FaviconUrlObserver : public WebStateObserver { public: - explicit FaviconUrlObserver(web::WebState* web_state) - : web::WebStateObserver(web_state) {} + FaviconUrlObserver() = default; + // Returns vavicon url candidates received in FaviconUrlUpdated. const std::vector<FaviconURL>& favicon_url_candidates() const { return favicon_url_candidates_; @@ -27,39 +29,56 @@ // Returns true if FaviconUrlUpdated was called. bool favicon_url_updated() const { return favicon_url_updated_; } // WebStateObserver overrides: - void FaviconUrlUpdated(web::WebState* web_state, + void FaviconUrlUpdated(WebState* web_state, const std::vector<FaviconURL>& candidates) override { favicon_url_candidates_ = candidates; favicon_url_updated_ = true; } + void WebStateDestroyed(WebState* web_state) override { NOTREACHED(); } private: bool favicon_url_updated_ = false; std::vector<FaviconURL> favicon_url_candidates_; + + DISALLOW_COPY_AND_ASSIGN(FaviconUrlObserver); }; } // namespace // Test fixture for WebStateDelegate::FaviconUrlUpdated and integration tests. class FaviconCallbackTest : public web::WebTestWithWebState { + public: + FaviconCallbackTest() = default; + protected: void SetUp() override { web::WebTestWithWebState::SetUp(); - observer_ = base::MakeUnique<FaviconUrlObserver>(web_state()); + web_state()->AddObserver(observer()); } - std::unique_ptr<FaviconUrlObserver> observer_; + void TearDown() override { + web_state()->RemoveObserver(observer()); + web::WebTestWithWebState::TearDown(); + } + + FaviconUrlObserver* observer() { return &observer_; } + + private: + FaviconUrlObserver observer_; + + DISALLOW_COPY_AND_ASSIGN(FaviconCallbackTest); }; // Tests page with shortcut icon link. TEST_F(FaviconCallbackTest, ShortcutIconFavicon) { - ASSERT_TRUE(observer_->favicon_url_candidates().empty()); + ASSERT_TRUE(observer()->favicon_url_candidates().empty()); LoadHtml(@"<link rel='shortcut icon' href='http://fav.ico'>"); WaitForCondition(^{ - return observer_->favicon_url_updated(); + return observer()->favicon_url_updated(); }); - const std::vector<FaviconURL>& favicons = observer_->favicon_url_candidates(); + const std::vector<FaviconURL>& favicons = + observer()->favicon_url_candidates(); ASSERT_EQ(1U, favicons.size()); EXPECT_EQ(GURL("http://fav.ico"), favicons[0].icon_url); EXPECT_EQ(FaviconURL::IconType::kFavicon, favicons[0].icon_type); @@ -68,14 +87,15 @@ // Tests page with icon link. TEST_F(FaviconCallbackTest, IconFavicon) { - ASSERT_TRUE(observer_->favicon_url_candidates().empty()); + ASSERT_TRUE(observer()->favicon_url_candidates().empty()); LoadHtml(@"<link rel='icon' href='http://fav.ico'>"); WaitForCondition(^{ - return observer_->favicon_url_updated(); + return observer()->favicon_url_updated(); }); - const std::vector<FaviconURL>& favicons = observer_->favicon_url_candidates(); + const std::vector<FaviconURL>& favicons = + observer()->favicon_url_candidates(); ASSERT_EQ(1U, favicons.size()); EXPECT_EQ(GURL("http://fav.ico"), favicons[0].icon_url); EXPECT_EQ(FaviconURL::IconType::kFavicon, favicons[0].icon_type); @@ -84,15 +104,16 @@ // Tests page with apple-touch-icon link. TEST_F(FaviconCallbackTest, AppleTouchIconFavicon) { - ASSERT_TRUE(observer_->favicon_url_candidates().empty()); + ASSERT_TRUE(observer()->favicon_url_candidates().empty()); LoadHtml(@"<link rel='apple-touch-icon' href='http://fav.ico'>", GURL("https://chromium.test")); WaitForCondition(^{ - return observer_->favicon_url_updated(); + return observer()->favicon_url_updated(); }); - const std::vector<FaviconURL>& favicons = observer_->favicon_url_candidates(); + const std::vector<FaviconURL>& favicons = + observer()->favicon_url_candidates(); ASSERT_EQ(2U, favicons.size()); EXPECT_EQ(GURL("http://fav.ico"), favicons[0].icon_url); EXPECT_EQ(FaviconURL::IconType::kTouchIcon, favicons[0].icon_type); @@ -104,15 +125,16 @@ // Tests page with apple-touch-icon-precomposed link. TEST_F(FaviconCallbackTest, AppleTouchIconPrecomposedFavicon) { - ASSERT_TRUE(observer_->favicon_url_candidates().empty()); + ASSERT_TRUE(observer()->favicon_url_candidates().empty()); LoadHtml(@"<link rel='apple-touch-icon-precomposed' href='http://fav.ico'>", GURL("https://chromium.test")); WaitForCondition(^{ - return observer_->favicon_url_updated(); + return observer()->favicon_url_updated(); }); - const std::vector<FaviconURL>& favicons = observer_->favicon_url_candidates(); + const std::vector<FaviconURL>& favicons = + observer()->favicon_url_candidates(); ASSERT_EQ(2U, favicons.size()); EXPECT_EQ(GURL("http://fav.ico"), favicons[0].icon_url); EXPECT_EQ(FaviconURL::IconType::kTouchPrecomposedIcon, favicons[0].icon_type); @@ -124,14 +146,15 @@ // Tests page without favicon link. TEST_F(FaviconCallbackTest, NoFavicon) { - ASSERT_TRUE(observer_->favicon_url_candidates().empty()); + ASSERT_TRUE(observer()->favicon_url_candidates().empty()); LoadHtml(@"<html></html>", GURL("https://chromium.test/test/test.html")); WaitForCondition(^{ - return observer_->favicon_url_updated(); + return observer()->favicon_url_updated(); }); - const std::vector<FaviconURL>& favicons = observer_->favicon_url_candidates(); + const std::vector<FaviconURL>& favicons = + observer()->favicon_url_candidates(); ASSERT_EQ(1U, favicons.size()); EXPECT_EQ(GURL("https://chromium.test/favicon.ico"), favicons[0].icon_url); EXPECT_EQ(FaviconURL::IconType::kFavicon, favicons[0].icon_type); @@ -140,17 +163,18 @@ // Tests page with multiple favicon links. TEST_F(FaviconCallbackTest, MultipleFavicons) { - ASSERT_TRUE(observer_->favicon_url_candidates().empty()); + ASSERT_TRUE(observer()->favicon_url_candidates().empty()); LoadHtml(@"<link rel='shortcut icon' href='http://fav.ico'>" "<link rel='icon' href='http://fav1.ico'>" "<link rel='apple-touch-icon' href='http://fav2.ico'>" "<link rel='apple-touch-icon-precomposed' href='http://fav3.ico'>"); WaitForCondition(^{ - return observer_->favicon_url_updated(); + return observer()->favicon_url_updated(); }); - const std::vector<FaviconURL>& favicons = observer_->favicon_url_candidates(); + const std::vector<FaviconURL>& favicons = + observer()->favicon_url_candidates(); ASSERT_EQ(4U, favicons.size()); EXPECT_EQ(GURL("http://fav.ico"), favicons[0].icon_url); EXPECT_EQ(FaviconURL::IconType::kFavicon, favicons[0].icon_type); @@ -168,15 +192,16 @@ // Tests page with invalid favicon url. TEST_F(FaviconCallbackTest, InvalidFaviconUrl) { - ASSERT_TRUE(observer_->favicon_url_candidates().empty()); + ASSERT_TRUE(observer()->favicon_url_candidates().empty()); LoadHtml(@"<html><head><link rel='icon' href='http://'></head></html>", GURL("https://chromium.test")); WaitForCondition(^{ - return observer_->favicon_url_updated(); + return observer()->favicon_url_updated(); }); - const std::vector<FaviconURL>& favicons = observer_->favicon_url_candidates(); + const std::vector<FaviconURL>& favicons = + observer()->favicon_url_candidates(); ASSERT_EQ(1U, favicons.size()); EXPECT_EQ(GURL("https://chromium.test/favicon.ico"), favicons[0].icon_url); EXPECT_EQ(FaviconURL::IconType::kFavicon, favicons[0].icon_type); @@ -185,14 +210,15 @@ // Tests page with empty favicon url. TEST_F(FaviconCallbackTest, EmptyFaviconUrl) { - ASSERT_TRUE(observer_->favicon_url_candidates().empty()); + ASSERT_TRUE(observer()->favicon_url_candidates().empty()); LoadHtml(@"<head><link rel='icon' href=''></head>"); WaitForCondition(^{ - return observer_->favicon_url_updated(); + return observer()->favicon_url_updated(); }); - const std::vector<FaviconURL>& favicons = observer_->favicon_url_candidates(); + const std::vector<FaviconURL>& favicons = + observer()->favicon_url_candidates(); ASSERT_EQ(1U, favicons.size()); // TODO(crbug.com/721852): This result is not correct. EXPECT_EQ(GURL("https://chromium.test/"), favicons[0].icon_url);
diff --git a/ios/web_view/internal/translate/web_view_translate_client.mm b/ios/web_view/internal/translate/web_view_translate_client.mm index 3cefeadd..02d310f6 100644 --- a/ios/web_view/internal/translate/web_view_translate_client.mm +++ b/ios/web_view/internal/translate/web_view_translate_client.mm
@@ -46,8 +46,7 @@ } // namespace WebViewTranslateClient::WebViewTranslateClient(web::WebState* web_state) - : web::WebStateObserver(web_state), - translate_manager_(base::MakeUnique<translate::TranslateManager>( + : translate_manager_(base::MakeUnique<translate::TranslateManager>( this, WebViewTranslateRankerFactory::GetForBrowserState( WebViewBrowserState::FromBrowserState(GetMainBrowserState())), @@ -55,7 +54,9 @@ WebViewBrowserState::FromBrowserState(GetMainBrowserState())))), translate_driver_(web_state, web_state->GetNavigationManager(), - translate_manager_.get()) {} + translate_manager_.get()) { + web_state->AddObserver(this); +} WebViewTranslateClient::~WebViewTranslateClient() = default; @@ -90,7 +91,6 @@ std::unique_ptr<translate::TranslatePrefs> WebViewTranslateClient::GetTranslatePrefs() { - DCHECK(web_state()); return base::MakeUnique<translate::TranslatePrefs>( GetPrefs(), prefs::kAcceptLanguages, nullptr); } @@ -129,6 +129,7 @@ } void WebViewTranslateClient::WebStateDestroyed(web::WebState* web_state) { + web_state->RemoveObserver(this); // Translation process can be interrupted. // Destroying the TranslateManager now guarantees that it never has to deal // with nullptr WebState.
diff --git a/media/audio/BUILD.gn b/media/audio/BUILD.gn index e3258c8..b56339f 100644 --- a/media/audio/BUILD.gn +++ b/media/audio/BUILD.gn
@@ -333,6 +333,8 @@ sources = [ "audio_device_info_accessor_for_tests.cc", "audio_device_info_accessor_for_tests.h", + "audio_system_test_util.cc", + "audio_system_test_util.h", "audio_unittest_util.cc", "audio_unittest_util.h", "mock_audio_manager.cc",
diff --git a/media/audio/audio_system_impl_unittest.cc b/media/audio/audio_system_impl_unittest.cc index 43e0783..b712b24 100644 --- a/media/audio/audio_system_impl_unittest.cc +++ b/media/audio/audio_system_impl_unittest.cc
@@ -3,353 +3,50 @@ // found in the LICENSE file. #include "media/audio/audio_system_impl.h" -#include "base/memory/ptr_util.h" #include "base/message_loop/message_loop.h" -#include "base/run_loop.h" -#include "base/single_thread_task_runner.h" -#include "base/task_runner_util.h" -#include "base/threading/thread.h" -#include "base/threading/thread_checker.h" -#include "base/threading/thread_task_runner_handle.h" -#include "media/audio/audio_device_description.h" +#include "media/audio/audio_system_test_util.h" #include "media/audio/audio_thread_impl.h" #include "media/audio/mock_audio_manager.h" #include "media/audio/test_audio_thread.h" -#include "media/base/test_helpers.h" -#include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" -namespace { -const char* kNonDefaultDeviceId = "non-default-device-id"; -} - namespace media { -bool operator==(const AudioDeviceDescription& lhs, - const AudioDeviceDescription& rhs) { - return lhs.device_name == rhs.device_name && lhs.unique_id == rhs.unique_id && - lhs.group_id == rhs.group_id; -} - // TODO(olka): These are the only tests for AudioSystemHelper. Make sure that // AudioSystemHelper is tested if AudioSystemImpl goes away. -class AudioSystemImplTest : public testing::TestWithParam<bool> { + +// Typed tests cannot be parametrized, so using template parameter instead of +// inheriting from TestWithParams<> +template <bool use_audio_thread> +class AudioSystemImplTestBase : public testing::Test { public: - AudioSystemImplTest() - : use_audio_thread_(GetParam()), - input_params_(AudioParameters::AUDIO_PCM_LINEAR, - CHANNEL_LAYOUT_MONO, - AudioParameters::kTelephoneSampleRate, - 16, - AudioParameters::kTelephoneSampleRate / 10), - output_params_(AudioParameters::AUDIO_PCM_LINEAR, - CHANNEL_LAYOUT_MONO, - AudioParameters::kTelephoneSampleRate, - 16, - AudioParameters::kTelephoneSampleRate / 20), - default_output_params_(AudioParameters::AUDIO_PCM_LINEAR, - CHANNEL_LAYOUT_MONO, - AudioParameters::kTelephoneSampleRate, - 16, - AudioParameters::kTelephoneSampleRate / 30) { - audio_manager_ = base::MakeUnique<MockAudioManager>( - base::MakeUnique<TestAudioThread>(use_audio_thread_)); - audio_manager_->SetInputStreamParameters(input_params_); - audio_manager_->SetOutputStreamParameters(output_params_); - audio_manager_->SetDefaultOutputStreamParameters(default_output_params_); + AudioSystemImplTestBase() {} - auto get_device_descriptions = [](const AudioDeviceDescriptions* source, - AudioDeviceDescriptions* destination) { - destination->insert(destination->end(), source->begin(), source->end()); - }; + ~AudioSystemImplTestBase() override {} - audio_manager_->SetInputDeviceDescriptionsCallback( - base::Bind(get_device_descriptions, - base::Unretained(&input_device_descriptions_))); - audio_manager_->SetOutputDeviceDescriptionsCallback( - base::Bind(get_device_descriptions, - base::Unretained(&output_device_descriptions_))); - + void SetUp() override { + audio_manager_ = std::make_unique<MockAudioManager>( + std::make_unique<TestAudioThread>(use_audio_thread)); audio_system_ = std::make_unique<AudioSystemImpl>(audio_manager_.get()); } - - ~AudioSystemImplTest() override { audio_manager_->Shutdown(); } - - void OnAudioParams(const base::Optional<AudioParameters>& expected, - const base::Optional<AudioParameters>& received) { - EXPECT_TRUE(thread_checker_.CalledOnValidThread()); - if (expected) { - EXPECT_TRUE(received); - EXPECT_EQ(expected->AsHumanReadableString(), - received->AsHumanReadableString()); - } else { - EXPECT_FALSE(received); - } - AudioParametersReceived(); - } - - void OnHasInputDevices(bool result) { - EXPECT_TRUE(thread_checker_.CalledOnValidThread()); - HasInputDevicesCallback(result); - } - - void OnHasOutputDevices(bool result) { - EXPECT_TRUE(thread_checker_.CalledOnValidThread()); - HasOutputDevicesCallback(result); - } - - void OnGetDeviceDescriptions( - const AudioDeviceDescriptions& expected_descriptions, - AudioDeviceDescriptions descriptions) { - EXPECT_TRUE(thread_checker_.CalledOnValidThread()); - EXPECT_EQ(expected_descriptions, descriptions); - DeviceDescriptionsReceived(); - } - - void OnInputDeviceInfo( - const base::Optional<AudioParameters>& expected_input, - const base::Optional<AudioParameters>& expected_associated_output, - const std::string& expected_associated_device_id, - const base::Optional<AudioParameters>& input, - const base::Optional<AudioParameters>& associated_output, - const std::string& associated_device_id) { - EXPECT_TRUE(thread_checker_.CalledOnValidThread()); - if (expected_input) { - EXPECT_TRUE(input); - EXPECT_EQ(expected_input->AsHumanReadableString(), - input->AsHumanReadableString()); - } else { - EXPECT_FALSE(input); - } - if (expected_associated_output) { - EXPECT_TRUE(associated_output); - EXPECT_EQ(expected_associated_output->AsHumanReadableString(), - associated_output->AsHumanReadableString()); - } else { - EXPECT_FALSE(associated_output); - } - EXPECT_EQ(expected_associated_device_id, associated_device_id); - InputDeviceInfoReceived(); - } - - void WaitForCallback() { - if (!use_audio_thread_) { - base::RunLoop().RunUntilIdle(); - return; - } - WaitableMessageLoopEvent event; - audio_manager_->GetTaskRunner()->PostTaskAndReply( - FROM_HERE, base::Bind(&base::DoNothing), event.GetClosure()); - // Runs the loop and waits for the |audio_thread_| to call event's closure, - // which means AudioSystem reply containing device parameters is already - // queued on the main thread. - event.RunAndWait(); - base::RunLoop().RunUntilIdle(); - } - - // Mocks to verify that AudioSystem replied with an expected callback. - MOCK_METHOD0(AudioParametersReceived, void(void)); - MOCK_METHOD1(HasInputDevicesCallback, void(bool)); - MOCK_METHOD1(HasOutputDevicesCallback, void(bool)); - MOCK_METHOD0(DeviceDescriptionsReceived, void(void)); - MOCK_METHOD1(AssociatedOutputDeviceIDReceived, void(const std::string&)); - MOCK_METHOD0(InputDeviceInfoReceived, void(void)); + void TearDown() override { audio_manager_->Shutdown(); } protected: + MockAudioManager* audio_manager() { return audio_manager_.get(); } + AudioSystem* audio_system() { return audio_system_.get(); } + base::MessageLoop message_loop_; - base::ThreadChecker thread_checker_; - bool use_audio_thread_; std::unique_ptr<MockAudioManager> audio_manager_; std::unique_ptr<AudioSystem> audio_system_; - AudioParameters input_params_; - AudioParameters output_params_; - AudioParameters default_output_params_; - AudioDeviceDescriptions input_device_descriptions_; - AudioDeviceDescriptions output_device_descriptions_; + // AudioSystemTester tester_; }; -TEST_P(AudioSystemImplTest, GetInputStreamParameters) { - EXPECT_CALL(*this, AudioParametersReceived()); - audio_system_->GetInputStreamParameters( - AudioDeviceDescription::kDefaultDeviceId, - base::Bind(&AudioSystemImplTest::OnAudioParams, base::Unretained(this), - input_params_)); - WaitForCallback(); -} +using AudioSystemTestBaseVariations = + testing::Types<AudioSystemImplTestBase<false>, + AudioSystemImplTestBase<true>>; -TEST_P(AudioSystemImplTest, GetInputStreamParametersNoDevice) { - audio_manager_->SetHasInputDevices(false); - EXPECT_CALL(*this, AudioParametersReceived()); - audio_system_->GetInputStreamParameters( - AudioDeviceDescription::kDefaultDeviceId, - base::Bind(&AudioSystemImplTest::OnAudioParams, base::Unretained(this), - base::Optional<AudioParameters>())); - WaitForCallback(); -} - -TEST_P(AudioSystemImplTest, GetOutputStreamParameters) { - EXPECT_CALL(*this, AudioParametersReceived()); - audio_system_->GetOutputStreamParameters( - kNonDefaultDeviceId, base::Bind(&AudioSystemImplTest::OnAudioParams, - base::Unretained(this), output_params_)); - WaitForCallback(); -} - -TEST_P(AudioSystemImplTest, GetDefaultOutputStreamParameters) { - EXPECT_CALL(*this, AudioParametersReceived()); - audio_system_->GetOutputStreamParameters( - AudioDeviceDescription::kDefaultDeviceId, - base::Bind(&AudioSystemImplTest::OnAudioParams, base::Unretained(this), - default_output_params_)); - WaitForCallback(); -} - -TEST_P(AudioSystemImplTest, GetOutputStreamParametersNoDevice) { - audio_manager_->SetHasOutputDevices(false); - EXPECT_CALL(*this, AudioParametersReceived()).Times(2); - - audio_system_->GetOutputStreamParameters( - AudioDeviceDescription::kDefaultDeviceId, - base::Bind(&AudioSystemImplTest::OnAudioParams, base::Unretained(this), - base::Optional<AudioParameters>())); - WaitForCallback(); - - audio_system_->GetOutputStreamParameters( - kNonDefaultDeviceId, - base::Bind(&AudioSystemImplTest::OnAudioParams, base::Unretained(this), - base::Optional<AudioParameters>())); - WaitForCallback(); -} - -TEST_P(AudioSystemImplTest, HasInputDevices) { - EXPECT_CALL(*this, HasInputDevicesCallback(true)); - audio_system_->HasInputDevices(base::Bind( - &AudioSystemImplTest::OnHasInputDevices, base::Unretained(this))); - WaitForCallback(); -} - -TEST_P(AudioSystemImplTest, HasNoInputDevices) { - audio_manager_->SetHasInputDevices(false); - EXPECT_CALL(*this, HasInputDevicesCallback(false)); - audio_system_->HasInputDevices(base::Bind( - &AudioSystemImplTest::OnHasInputDevices, base::Unretained(this))); - WaitForCallback(); -} - -TEST_P(AudioSystemImplTest, HasOutputDevices) { - EXPECT_CALL(*this, HasOutputDevicesCallback(true)); - audio_system_->HasOutputDevices(base::Bind( - &AudioSystemImplTest::OnHasOutputDevices, base::Unretained(this))); - WaitForCallback(); -} - -TEST_P(AudioSystemImplTest, HasNoOutputDevices) { - audio_manager_->SetHasOutputDevices(false); - EXPECT_CALL(*this, HasOutputDevicesCallback(false)); - audio_system_->HasOutputDevices(base::Bind( - &AudioSystemImplTest::OnHasOutputDevices, base::Unretained(this))); - WaitForCallback(); -} - -TEST_P(AudioSystemImplTest, GetInputDeviceDescriptionsNoInputDevices) { - output_device_descriptions_.emplace_back("output_device_name", - "output_device_id", "group_id"); - EXPECT_EQ(0, static_cast<int>(input_device_descriptions_.size())); - EXPECT_EQ(1, static_cast<int>(output_device_descriptions_.size())); - EXPECT_CALL(*this, DeviceDescriptionsReceived()); - audio_system_->GetDeviceDescriptions( - true, base::Bind(&AudioSystemImplTest::OnGetDeviceDescriptions, - base::Unretained(this), input_device_descriptions_)); - WaitForCallback(); -} - -TEST_P(AudioSystemImplTest, GetInputDeviceDescriptions) { - output_device_descriptions_.emplace_back("output_device_name", - "output_device_id", "group_id"); - input_device_descriptions_.emplace_back("input_device_name1", - "input_device_id1", "group_id1"); - input_device_descriptions_.emplace_back("input_device_name2", - "input_device_id2", "group_id2"); - EXPECT_EQ(2, static_cast<int>(input_device_descriptions_.size())); - EXPECT_EQ(1, static_cast<int>(output_device_descriptions_.size())); - EXPECT_CALL(*this, DeviceDescriptionsReceived()); - audio_system_->GetDeviceDescriptions( - true, base::Bind(&AudioSystemImplTest::OnGetDeviceDescriptions, - base::Unretained(this), input_device_descriptions_)); - WaitForCallback(); -} - -TEST_P(AudioSystemImplTest, GetOutputDeviceDescriptionsNoInputDevices) { - input_device_descriptions_.emplace_back("input_device_name", - "input_device_id", "group_id"); - EXPECT_EQ(0, static_cast<int>(output_device_descriptions_.size())); - EXPECT_EQ(1, static_cast<int>(input_device_descriptions_.size())); - EXPECT_CALL(*this, DeviceDescriptionsReceived()); - audio_system_->GetDeviceDescriptions( - false, base::Bind(&AudioSystemImplTest::OnGetDeviceDescriptions, - base::Unretained(this), output_device_descriptions_)); - WaitForCallback(); -} - -TEST_P(AudioSystemImplTest, GetOutputDeviceDescriptions) { - input_device_descriptions_.emplace_back("input_device_name", - "input_device_id", "group_id"); - output_device_descriptions_.emplace_back("output_device_name1", - "output_device_id1", "group_id1"); - output_device_descriptions_.emplace_back("output_device_name2", - "output_device_id2", "group_id2"); - EXPECT_EQ(2, static_cast<int>(output_device_descriptions_.size())); - EXPECT_EQ(1, static_cast<int>(input_device_descriptions_.size())); - EXPECT_CALL(*this, DeviceDescriptionsReceived()); - audio_system_->GetDeviceDescriptions( - false, base::Bind(&AudioSystemImplTest::OnGetDeviceDescriptions, - base::Unretained(this), output_device_descriptions_)); - WaitForCallback(); -} - -TEST_P(AudioSystemImplTest, GetAssociatedOutputDeviceID) { - const std::string associated_id("associated_id"); - audio_manager_->SetAssociatedOutputDeviceIDCallback( - base::Bind([](const std::string& result, - const std::string&) -> std::string { return result; }, - associated_id)); - - EXPECT_CALL(*this, AssociatedOutputDeviceIDReceived(associated_id)); - - audio_system_->GetAssociatedOutputDeviceID( - std::string(), - base::Bind(&AudioSystemImplTest::AssociatedOutputDeviceIDReceived, - base::Unretained(this))); - WaitForCallback(); -} - -TEST_P(AudioSystemImplTest, GetInputDeviceInfoNoAssociation) { - EXPECT_CALL(*this, InputDeviceInfoReceived()); - - audio_system_->GetInputDeviceInfo( - kNonDefaultDeviceId, - base::Bind(&AudioSystemImplTest::OnInputDeviceInfo, - base::Unretained(this), input_params_, - base::Optional<AudioParameters>(), std::string())); - WaitForCallback(); -} - -TEST_P(AudioSystemImplTest, GetInputDeviceInfoWithAssociation) { - EXPECT_CALL(*this, InputDeviceInfoReceived()); - - const std::string associated_id("associated_id"); - audio_manager_->SetAssociatedOutputDeviceIDCallback( - base::Bind([](const std::string& result, - const std::string&) -> std::string { return result; }, - associated_id)); - - audio_system_->GetInputDeviceInfo( - kNonDefaultDeviceId, base::Bind(&AudioSystemImplTest::OnInputDeviceInfo, - base::Unretained(this), input_params_, - output_params_, associated_id)); - WaitForCallback(); -} - -INSTANTIATE_TEST_CASE_P(, AudioSystemImplTest, testing::Values(false, true)); +INSTANTIATE_TYPED_TEST_CASE_P(AudioSystemImpl, + AudioSystemTestTemplate, + AudioSystemTestBaseVariations); } // namespace media
diff --git a/media/audio/audio_system_test_util.cc b/media/audio/audio_system_test_util.cc new file mode 100644 index 0000000..89a3625 --- /dev/null +++ b/media/audio/audio_system_test_util.cc
@@ -0,0 +1,147 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "media/audio/audio_system_test_util.h" + +#include "base/bind.h" +#include "base/memory/ptr_util.h" + +namespace media { + +bool operator==(const AudioDeviceDescription& lhs, + const AudioDeviceDescription& rhs) { + return lhs.device_name == rhs.device_name && lhs.unique_id == rhs.unique_id && + lhs.group_id == rhs.group_id; +} + +AudioSystem::OnAudioParamsCallback +AudioSystemCallbackExpectations::GetAudioParamsCallback( + const base::Location& location, + base::OnceClosure on_cb_received, + const base::Optional<AudioParameters>& expected_params) { + return base::BindOnce(&AudioSystemCallbackExpectations::OnAudioParams, + base::Unretained(this), location.ToString(), + std::move(on_cb_received), expected_params); +} + +AudioSystem::OnBoolCallback AudioSystemCallbackExpectations::GetBoolCallback( + const base::Location& location, + base::OnceClosure on_cb_received, + bool expected) { + return base::BindOnce(&AudioSystemCallbackExpectations::OnBool, + base::Unretained(this), location.ToString(), + std::move(on_cb_received), expected); +} + +AudioSystem::OnDeviceDescriptionsCallback +AudioSystemCallbackExpectations::GetDeviceDescriptionsCallback( + const base::Location& location, + base::OnceClosure on_cb_received, + const AudioDeviceDescriptions& expected_descriptions) { + return base::BindOnce(&AudioSystemCallbackExpectations::OnDeviceDescriptions, + base::Unretained(this), location.ToString(), + std::move(on_cb_received), expected_descriptions); +} + +AudioSystem::OnInputDeviceInfoCallback +AudioSystemCallbackExpectations::GetInputDeviceInfoCallback( + const base::Location& location, + base::OnceClosure on_cb_received, + const base::Optional<AudioParameters>& expected_input, + const base::Optional<AudioParameters>& expected_associated_output, + const std::string& expected_associated_device_id) { + return base::BindOnce(&AudioSystemCallbackExpectations::OnInputDeviceInfo, + base::Unretained(this), location.ToString(), + std::move(on_cb_received), expected_input, + expected_associated_output, + expected_associated_device_id); +} + +AudioSystem::OnDeviceIdCallback +AudioSystemCallbackExpectations::GetDeviceIdCallback( + const base::Location& location, + base::OnceClosure on_cb_received, + const std::string& expected_id) { + return base::BindOnce(&AudioSystemCallbackExpectations::OnDeviceId, + base::Unretained(this), location.ToString(), + std::move(on_cb_received), expected_id); +} + +void AudioSystemCallbackExpectations::OnAudioParams( + const std::string& from_here, + base::OnceClosure on_cb_received, + const base::Optional<AudioParameters>& expected, + const base::Optional<AudioParameters>& received) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_) << from_here; + if (expected) { + EXPECT_TRUE(received) << from_here; + EXPECT_EQ(expected->AsHumanReadableString(), + received->AsHumanReadableString()) + << from_here; + } else { + EXPECT_FALSE(received) << from_here; + } + std::move(on_cb_received).Run(); +} + +void AudioSystemCallbackExpectations::OnBool(const std::string& from_here, + base::OnceClosure on_cb_received, + bool expected, + bool result) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_) << from_here; + EXPECT_EQ(expected, result) << from_here; + std::move(on_cb_received).Run(); +} + +void AudioSystemCallbackExpectations::OnDeviceDescriptions( + const std::string& from_here, + base::OnceClosure on_cb_received, + const AudioDeviceDescriptions& expected_descriptions, + AudioDeviceDescriptions descriptions) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_) << from_here; + EXPECT_EQ(expected_descriptions, descriptions); + std::move(on_cb_received).Run(); +} + +void AudioSystemCallbackExpectations::OnInputDeviceInfo( + const std::string& from_here, + base::OnceClosure on_cb_received, + const base::Optional<AudioParameters>& expected_input, + const base::Optional<AudioParameters>& expected_associated_output, + const std::string& expected_associated_device_id, + const base::Optional<AudioParameters>& input, + const base::Optional<AudioParameters>& associated_output, + const std::string& associated_device_id) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_) << from_here; + if (expected_input) { + EXPECT_TRUE(input) << from_here; + EXPECT_EQ(expected_input->AsHumanReadableString(), + input->AsHumanReadableString()) + << from_here; + } else { + EXPECT_FALSE(input) << from_here; + } + if (expected_associated_output) { + EXPECT_TRUE(associated_output) << from_here; + EXPECT_EQ(expected_associated_output->AsHumanReadableString(), + associated_output->AsHumanReadableString()) + << from_here; + } else { + EXPECT_FALSE(associated_output) << from_here; + } + EXPECT_EQ(expected_associated_device_id, associated_device_id) << from_here; + std::move(on_cb_received).Run(); +} + +void AudioSystemCallbackExpectations::OnDeviceId( + const std::string& from_here, + base::OnceClosure on_cb_received, + const std::string& expected_id, + const std::string& result_id) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_) << from_here; + EXPECT_EQ(expected_id, result_id) << from_here; + std::move(on_cb_received).Run(); +} + +} // namespace media
diff --git a/media/audio/audio_system_test_util.h b/media/audio/audio_system_test_util.h new file mode 100644 index 0000000..1f20388 --- /dev/null +++ b/media/audio/audio_system_test_util.h
@@ -0,0 +1,370 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef MEDIA_AUDIO_AUDIO_SYSTEM_TEST_UTIL_H_ +#define MEDIA_AUDIO_AUDIO_SYSTEM_TEST_UTIL_H_ + +#include "base/bind.h" +#include "base/location.h" +#include "base/macros.h" +#include "base/message_loop/message_loop.h" +#include "base/optional.h" +#include "base/run_loop.h" +#include "base/threading/thread_checker.h" +#include "media/audio/audio_device_description.h" +#include "media/audio/audio_system.h" +#include "media/audio/mock_audio_manager.h" +#include "media/base/audio_parameters.h" +#include "testing/gmock/include/gmock/gmock.h" + +namespace media { + +// For tests only. Creates AudioSystem callbacks to be passed to AudioSystem +// methods. When AudioSystem calls such a callback, it verifies treading +// expectations and checks recieved parameters against expected values passed +// during its creation. After that it calls |on_cb_received| closure. +// Note AudioSystemCallbackExpectations object must outlive all the callbacks +// it produced, since they contain raw pointers to it. +class AudioSystemCallbackExpectations { + public: + AudioSystemCallbackExpectations() = default; + AudioSystem::OnAudioParamsCallback GetAudioParamsCallback( + const base::Location& location, + base::OnceClosure on_cb_received, + const base::Optional<AudioParameters>& expected_params); + + AudioSystem::OnBoolCallback GetBoolCallback(const base::Location& location, + base::OnceClosure on_cb_received, + bool expected); + + AudioSystem::OnDeviceDescriptionsCallback GetDeviceDescriptionsCallback( + const base::Location& location, + base::OnceClosure on_cb_received, + const AudioDeviceDescriptions& expected_descriptions); + + AudioSystem::OnInputDeviceInfoCallback GetInputDeviceInfoCallback( + const base::Location& location, + base::OnceClosure on_cb_received, + const base::Optional<AudioParameters>& expected_input, + const base::Optional<AudioParameters>& expected_associated_output, + const std::string& expected_associated_device_id); + + AudioSystem::OnDeviceIdCallback GetDeviceIdCallback( + const base::Location& location, + base::OnceClosure on_cb_received, + const std::string& expected_id); + + private: + // Methods to verify correctness of received data. + void OnAudioParams(const std::string& from_here, + base::OnceClosure on_cb_received, + const base::Optional<AudioParameters>& expected, + const base::Optional<AudioParameters>& received); + + void OnBool(const std::string& from_here, + base::OnceClosure on_cb_received, + bool expected, + bool result); + + void OnDeviceDescriptions( + const std::string& from_here, + base::OnceClosure on_cb_received, + const AudioDeviceDescriptions& expected_descriptions, + AudioDeviceDescriptions descriptions); + + void OnInputDeviceInfo( + const std::string& from_here, + base::OnceClosure on_cb_received, + const base::Optional<AudioParameters>& expected_input, + const base::Optional<AudioParameters>& expected_associated_output, + const std::string& expected_associated_device_id, + const base::Optional<AudioParameters>& input, + const base::Optional<AudioParameters>& associated_output, + const std::string& associated_device_id); + + void OnDeviceId(const std::string& from_here, + base::OnceClosure on_cb_received, + const std::string& expected_id, + const std::string& result_id); + + THREAD_CHECKER(thread_checker_); + DISALLOW_COPY_AND_ASSIGN(AudioSystemCallbackExpectations); +}; + +// Template test case to test AudioSystem implementations. +template <class T> +class AudioSystemTestTemplate : public T { + public: + AudioSystemTestTemplate() {} + ~AudioSystemTestTemplate() override {} + + void SetUp() override { + T::SetUp(); + input_params_ = + AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_MONO, + AudioParameters::kTelephoneSampleRate, 16, + AudioParameters::kTelephoneSampleRate / 10); + output_params_ = + AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_MONO, + AudioParameters::kTelephoneSampleRate, 16, + AudioParameters::kTelephoneSampleRate / 20); + default_output_params_ = + AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_MONO, + AudioParameters::kTelephoneSampleRate, 16, + AudioParameters::kTelephoneSampleRate / 30); + audio_manager()->SetInputStreamParameters(input_params_); + audio_manager()->SetOutputStreamParameters(output_params_); + audio_manager()->SetDefaultOutputStreamParameters(default_output_params_); + + auto get_device_descriptions = [](const AudioDeviceDescriptions* source, + AudioDeviceDescriptions* destination) { + destination->insert(destination->end(), source->begin(), source->end()); + }; + + audio_manager()->SetInputDeviceDescriptionsCallback( + base::Bind(get_device_descriptions, + base::Unretained(&input_device_descriptions_))); + audio_manager()->SetOutputDeviceDescriptionsCallback( + base::Bind(get_device_descriptions, + base::Unretained(&output_device_descriptions_))); + } + + protected: + MockAudioManager* audio_manager() { return T::audio_manager(); } + AudioSystem* audio_system() { return T::audio_system(); } + + AudioSystemCallbackExpectations expectations_; + AudioParameters input_params_; + AudioParameters output_params_; + AudioParameters default_output_params_; + AudioDeviceDescriptions input_device_descriptions_; + AudioDeviceDescriptions output_device_descriptions_; + + private: + DISALLOW_COPY_AND_ASSIGN(AudioSystemTestTemplate); +}; + +TYPED_TEST_CASE_P(AudioSystemTestTemplate); + +TYPED_TEST_P(AudioSystemTestTemplate, GetInputStreamParametersNormal) { + base::RunLoop wait_loop; + this->audio_system()->GetInputStreamParameters( + AudioDeviceDescription::kDefaultDeviceId, + this->expectations_.GetAudioParamsCallback( + FROM_HERE, wait_loop.QuitClosure(), this->input_params_)); + wait_loop.Run(); +} + +TYPED_TEST_P(AudioSystemTestTemplate, GetInputStreamParametersNoDevice) { + this->audio_manager()->SetHasInputDevices(false); + + base::RunLoop wait_loop; + this->audio_system()->GetInputStreamParameters( + AudioDeviceDescription::kDefaultDeviceId, + this->expectations_.GetAudioParamsCallback( + FROM_HERE, wait_loop.QuitClosure(), + base::Optional<AudioParameters>())); + wait_loop.Run(); +} + +TYPED_TEST_P(AudioSystemTestTemplate, GetOutputStreamParameters) { + base::RunLoop wait_loop; + this->audio_system()->GetOutputStreamParameters( + "non-default-device-id", + this->expectations_.GetAudioParamsCallback( + FROM_HERE, wait_loop.QuitClosure(), this->output_params_)); + wait_loop.Run(); +} + +TYPED_TEST_P(AudioSystemTestTemplate, GetDefaultOutputStreamParameters) { + base::RunLoop wait_loop; + this->audio_system()->GetOutputStreamParameters( + AudioDeviceDescription::kDefaultDeviceId, + this->expectations_.GetAudioParamsCallback( + FROM_HERE, wait_loop.QuitClosure(), this->default_output_params_)); + wait_loop.Run(); +} + +TYPED_TEST_P(AudioSystemTestTemplate, + GetOutputStreamParametersForDefaultDeviceNoDevices) { + this->audio_manager()->SetHasOutputDevices(false); + base::RunLoop wait_loop; + this->audio_system()->GetOutputStreamParameters( + AudioDeviceDescription::kDefaultDeviceId, + this->expectations_.GetAudioParamsCallback( + FROM_HERE, wait_loop.QuitClosure(), + base::Optional<AudioParameters>())); + wait_loop.Run(); +} + +TYPED_TEST_P(AudioSystemTestTemplate, + GetOutputStreamParametersForNonDefaultDeviceNoDevices) { + this->audio_manager()->SetHasOutputDevices(false); + base::RunLoop wait_loop; + this->audio_system()->GetOutputStreamParameters( + "non-default-device-id", this->expectations_.GetAudioParamsCallback( + FROM_HERE, wait_loop.QuitClosure(), + base::Optional<AudioParameters>())); + wait_loop.Run(); +} + +TYPED_TEST_P(AudioSystemTestTemplate, HasInputDevices) { + base::RunLoop wait_loop; + this->audio_system()->HasInputDevices(this->expectations_.GetBoolCallback( + FROM_HERE, wait_loop.QuitClosure(), true)); + wait_loop.Run(); +} + +TYPED_TEST_P(AudioSystemTestTemplate, HasNoInputDevices) { + this->audio_manager()->SetHasInputDevices(false); + base::RunLoop wait_loop; + this->audio_system()->HasInputDevices(this->expectations_.GetBoolCallback( + FROM_HERE, wait_loop.QuitClosure(), false)); + wait_loop.Run(); +} + +TYPED_TEST_P(AudioSystemTestTemplate, HasOutputDevices) { + base::RunLoop wait_loop; + this->audio_system()->HasOutputDevices(this->expectations_.GetBoolCallback( + FROM_HERE, wait_loop.QuitClosure(), true)); + wait_loop.Run(); +} + +TYPED_TEST_P(AudioSystemTestTemplate, HasNoOutputDevices) { + this->audio_manager()->SetHasOutputDevices(false); + base::RunLoop wait_loop; + this->audio_system()->HasOutputDevices(this->expectations_.GetBoolCallback( + FROM_HERE, wait_loop.QuitClosure(), false)); + wait_loop.Run(); +} + +TYPED_TEST_P(AudioSystemTestTemplate, + GetInputDeviceDescriptionsNoInputDevices) { + this->output_device_descriptions_.emplace_back( + "output_device_name", "output_device_id", "group_id"); + EXPECT_EQ(0, static_cast<int>(this->input_device_descriptions_.size())); + EXPECT_EQ(1, static_cast<int>(this->output_device_descriptions_.size())); + + base::RunLoop wait_loop; + this->audio_system()->GetDeviceDescriptions( + true, this->expectations_.GetDeviceDescriptionsCallback( + FROM_HERE, wait_loop.QuitClosure(), + this->input_device_descriptions_)); + wait_loop.Run(); +} + +TYPED_TEST_P(AudioSystemTestTemplate, GetInputDeviceDescriptions) { + this->output_device_descriptions_.emplace_back( + "output_device_name", "output_device_id", "group_id"); + this->input_device_descriptions_.emplace_back( + "input_device_name1", "input_device_id1", "group_id1"); + this->input_device_descriptions_.emplace_back( + "input_device_name2", "input_device_id2", "group_id2"); + EXPECT_EQ(2, static_cast<int>(this->input_device_descriptions_.size())); + EXPECT_EQ(1, static_cast<int>(this->output_device_descriptions_.size())); + + base::RunLoop wait_loop; + this->audio_system()->GetDeviceDescriptions( + true, this->expectations_.GetDeviceDescriptionsCallback( + FROM_HERE, wait_loop.QuitClosure(), + this->input_device_descriptions_)); + wait_loop.Run(); +} + +TYPED_TEST_P(AudioSystemTestTemplate, + GetOutputDeviceDescriptionsNoInputDevices) { + this->input_device_descriptions_.emplace_back("input_device_name", + "input_device_id", "group_id"); + EXPECT_EQ(0, static_cast<int>(this->output_device_descriptions_.size())); + EXPECT_EQ(1, static_cast<int>(this->input_device_descriptions_.size())); + + base::RunLoop wait_loop; + this->audio_system()->GetDeviceDescriptions( + false, this->expectations_.GetDeviceDescriptionsCallback( + FROM_HERE, wait_loop.QuitClosure(), + this->output_device_descriptions_)); + wait_loop.Run(); +} + +TYPED_TEST_P(AudioSystemTestTemplate, GetOutputDeviceDescriptions) { + this->input_device_descriptions_.emplace_back("input_device_name", + "input_device_id", "group_id"); + this->output_device_descriptions_.emplace_back( + "output_device_name1", "output_device_id1", "group_id1"); + this->output_device_descriptions_.emplace_back( + "output_device_name2", "output_device_id2", "group_id2"); + EXPECT_EQ(2, static_cast<int>(this->output_device_descriptions_.size())); + EXPECT_EQ(1, static_cast<int>(this->input_device_descriptions_.size())); + + base::RunLoop wait_loop; + this->audio_system()->GetDeviceDescriptions( + false, this->expectations_.GetDeviceDescriptionsCallback( + FROM_HERE, wait_loop.QuitClosure(), + this->output_device_descriptions_)); + wait_loop.Run(); +} + +TYPED_TEST_P(AudioSystemTestTemplate, GetAssociatedOutputDeviceID) { + const std::string associated_id("associated_id"); + this->audio_manager()->SetAssociatedOutputDeviceIDCallback( + base::Bind([](const std::string& result, + const std::string&) -> std::string { return result; }, + associated_id)); + + base::RunLoop wait_loop; + this->audio_system()->GetAssociatedOutputDeviceID( + std::string(), this->expectations_.GetDeviceIdCallback( + FROM_HERE, wait_loop.QuitClosure(), associated_id)); + wait_loop.Run(); +} + +TYPED_TEST_P(AudioSystemTestTemplate, GetInputDeviceInfoNoAssociation) { + base::RunLoop wait_loop; + this->audio_system()->GetInputDeviceInfo( + "non-default-device-id", + this->expectations_.GetInputDeviceInfoCallback( + FROM_HERE, wait_loop.QuitClosure(), this->input_params_, + base::Optional<AudioParameters>(), std::string())); + wait_loop.Run(); +} + +TYPED_TEST_P(AudioSystemTestTemplate, GetInputDeviceInfoWithAssociation) { + const std::string associated_id("associated_id"); + this->audio_manager()->SetAssociatedOutputDeviceIDCallback( + base::Bind([](const std::string& result, + const std::string&) -> std::string { return result; }, + associated_id)); + + base::RunLoop wait_loop; + this->audio_system()->GetInputDeviceInfo( + "non-default-device-id", + this->expectations_.GetInputDeviceInfoCallback( + FROM_HERE, wait_loop.QuitClosure(), this->input_params_, + this->output_params_, associated_id)); + wait_loop.Run(); +} + +REGISTER_TYPED_TEST_CASE_P( + AudioSystemTestTemplate, + GetInputStreamParametersNormal, + GetInputStreamParametersNoDevice, + GetOutputStreamParameters, + GetDefaultOutputStreamParameters, + GetOutputStreamParametersForDefaultDeviceNoDevices, + GetOutputStreamParametersForNonDefaultDeviceNoDevices, + HasInputDevices, + HasNoInputDevices, + HasOutputDevices, + HasNoOutputDevices, + GetInputDeviceDescriptionsNoInputDevices, + GetInputDeviceDescriptions, + GetOutputDeviceDescriptionsNoInputDevices, + GetOutputDeviceDescriptions, + GetAssociatedOutputDeviceID, + GetInputDeviceInfoNoAssociation, + GetInputDeviceInfoWithAssociation); + +} // namespace media + +#endif // MEDIA_AUDIO_AUDIO_SYSTEM_TEST_UTIL_H_
diff --git a/services/network/public/cpp/BUILD.gn b/services/network/public/cpp/BUILD.gn index a2df10ec..b9318813 100644 --- a/services/network/public/cpp/BUILD.gn +++ b/services/network/public/cpp/BUILD.gn
@@ -10,8 +10,8 @@ "cors_error_status.h", "net_adapters.cc", "net_adapters.h", - "url_loader_status.cc", - "url_loader_status.h", + "url_loader_completion_status.cc", + "url_loader_completion_status.h", ] deps = [
diff --git a/services/network/public/cpp/url_loader_completion_status.cc b/services/network/public/cpp/url_loader_completion_status.cc new file mode 100644 index 0000000..8183d5b --- /dev/null +++ b/services/network/public/cpp/url_loader_completion_status.cc
@@ -0,0 +1,37 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "services/network/public/cpp/url_loader_completion_status.h" + +#include "net/base/net_errors.h" + +namespace network { + +URLLoaderCompletionStatus::URLLoaderCompletionStatus() = default; +URLLoaderCompletionStatus::URLLoaderCompletionStatus( + const URLLoaderCompletionStatus& status) = default; + +URLLoaderCompletionStatus::URLLoaderCompletionStatus(int error_code) + : error_code(error_code), completion_time(base::TimeTicks::Now()) {} + +URLLoaderCompletionStatus::URLLoaderCompletionStatus( + const CORSErrorStatus& error) + : URLLoaderCompletionStatus(net::ERR_FAILED) { + cors_error_status = error; +} + +URLLoaderCompletionStatus::~URLLoaderCompletionStatus() = default; + +bool URLLoaderCompletionStatus::operator==( + const URLLoaderCompletionStatus& rhs) const { + return error_code == rhs.error_code && + exists_in_cache == rhs.exists_in_cache && + completion_time == rhs.completion_time && + encoded_data_length == rhs.encoded_data_length && + encoded_body_length == rhs.encoded_body_length && + decoded_body_length == rhs.decoded_body_length && + cors_error_status == rhs.cors_error_status; +} + +} // namespace network
diff --git a/services/network/public/cpp/url_loader_status.h b/services/network/public/cpp/url_loader_completion_status.h similarity index 69% rename from services/network/public/cpp/url_loader_status.h rename to services/network/public/cpp/url_loader_completion_status.h index 0c08a8ba..2c39f8c 100644 --- a/services/network/public/cpp/url_loader_status.h +++ b/services/network/public/cpp/url_loader_completion_status.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef SERVICES_NETWORK_PUBLIC_CPP_URL_LOADER_STATUS_H_ -#define SERVICES_NETWORK_PUBLIC_CPP_URL_LOADER_STATUS_H_ +#ifndef SERVICES_NETWORK_PUBLIC_CPP_URL_LOADER_COMPLETION_STATUS_H_ +#define SERVICES_NETWORK_PUBLIC_CPP_URL_LOADER_COMPLETION_STATUS_H_ #include <stdint.h> @@ -15,21 +15,21 @@ namespace network { -struct URLLoaderStatus { - URLLoaderStatus(); - URLLoaderStatus(const URLLoaderStatus& status); +struct URLLoaderCompletionStatus { + URLLoaderCompletionStatus(); + URLLoaderCompletionStatus(const URLLoaderCompletionStatus& status); // Sets |error_code| to |error_code| and base::TimeTicks::Now() to // |completion_time|. - explicit URLLoaderStatus(int error_code); + explicit URLLoaderCompletionStatus(int error_code); // Sets ERR_FAILED to |error_code|, |error| to |cors_error_status|, and // base::TimeTicks::Now() to |completion_time|. - explicit URLLoaderStatus(const CORSErrorStatus& error); + explicit URLLoaderCompletionStatus(const CORSErrorStatus& error); - ~URLLoaderStatus(); + ~URLLoaderCompletionStatus(); - bool operator==(const URLLoaderStatus& rhs) const; + bool operator==(const URLLoaderCompletionStatus& rhs) const; // The error code. ERR_FAILED is set for CORS errors. int error_code = 0; @@ -55,4 +55,4 @@ } // namespace network -#endif // SERVICES_NETWORK_PUBLIC_CPP_URL_LOADER_STATUS_H_ +#endif // SERVICES_NETWORK_PUBLIC_CPP_URL_LOADER_COMPLETION_STATUS_H_
diff --git a/services/network/public/cpp/url_loader_status.cc b/services/network/public/cpp/url_loader_status.cc deleted file mode 100644 index 6b4f7dc..0000000 --- a/services/network/public/cpp/url_loader_status.cc +++ /dev/null
@@ -1,34 +0,0 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "services/network/public/cpp/url_loader_status.h" - -#include "net/base/net_errors.h" - -namespace network { - -URLLoaderStatus::URLLoaderStatus() = default; -URLLoaderStatus::URLLoaderStatus(const URLLoaderStatus& status) = default; - -URLLoaderStatus::URLLoaderStatus(int error_code) - : error_code(error_code), completion_time(base::TimeTicks::Now()) {} - -URLLoaderStatus::URLLoaderStatus(const CORSErrorStatus& error) - : URLLoaderStatus(net::ERR_FAILED) { - cors_error_status = error; -} - -URLLoaderStatus::~URLLoaderStatus() = default; - -bool URLLoaderStatus::operator==(const URLLoaderStatus& rhs) const { - return error_code == rhs.error_code && - exists_in_cache == rhs.exists_in_cache && - completion_time == rhs.completion_time && - encoded_data_length == rhs.encoded_data_length && - encoded_body_length == rhs.encoded_body_length && - decoded_body_length == rhs.decoded_body_length && - cors_error_status == rhs.cors_error_status; -} - -} // namespace network
diff --git a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json index b130dd7..ca5f00f 100644 --- a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json +++ b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
@@ -4987,6 +4987,12 @@ {} ] ], + "wake-lock/wakelock-applicability-manual.https.html": [ + [ + "/wake-lock/wakelock-applicability-manual.https.html", + {} + ] + ], "web-nfc/nfc_hw_disabled-manual.https.html": [ [ "/web-nfc/nfc_hw_disabled-manual.https.html", @@ -142962,6 +142968,16 @@ {} ] ], + "wake-lock/wakelock-applicability-manual.https-expected.txt": [ + [ + {} + ] + ], + "wake-lock/wakelock-cancel-twice.https-expected.txt": [ + [ + {} + ] + ], "wake-lock/wakelock-disabled-by-feature-policy.https.sub-expected.txt": [ [ {} @@ -142972,6 +142988,11 @@ {} ] ], + "wake-lock/wakelock-document-hidden.https-expected.txt": [ + [ + {} + ] + ], "wake-lock/wakelock-enabled-by-feature-policy-attribute-redirect-on-load.https.sub-expected.txt": [ [ {} @@ -206282,12 +206303,24 @@ {} ] ], + "wake-lock/wakelock-cancel-twice.https.html": [ + [ + "/wake-lock/wakelock-cancel-twice.https.html", + {} + ] + ], "wake-lock/wakelock-disabled-by-feature-policy.https.sub.html": [ [ "/wake-lock/wakelock-disabled-by-feature-policy.https.sub.html", {} ] ], + "wake-lock/wakelock-document-hidden.https.html": [ + [ + "/wake-lock/wakelock-document-hidden.https.html", + {} + ] + ], "wake-lock/wakelock-enabled-by-feature-policy-attribute-redirect-on-load.https.sub.html": [ [ "/wake-lock/wakelock-enabled-by-feature-policy-attribute-redirect-on-load.https.sub.html", @@ -206312,6 +206345,12 @@ {} ] ], + "wake-lock/wakelock-insecure-context.html": [ + [ + "/wake-lock/wakelock-insecure-context.html", + {} + ] + ], "wake-lock/wakelock-object-is-independent.https.html": [ [ "/wake-lock/wakelock-object-is-independent.https.html", @@ -227176,7 +227215,7 @@ "testharness" ], "content-security-policy/nonce-hiding/script-nonces-hidden.tentative.html": [ - "c3265d6ead066201f712aa06beac162f365dd058", + "44982a605aaef57edfd9bbd9af98b1eee8d9ba1d", "testharness" ], "content-security-policy/nonce-hiding/script-nonces-hidden.tentative.html.headers": [ @@ -334004,7 +334043,23 @@ "support" ], "wake-lock/wakelock-api.https.html": [ - "a80557f44c8381495d80030ee8868153bfffd3da", + "0718abe7cc05382646dc83e5085bf5a35c025e6c", + "testharness" + ], + "wake-lock/wakelock-applicability-manual.https-expected.txt": [ + "001b1c6dafec13d79e84d0e990b36400321d1166", + "support" + ], + "wake-lock/wakelock-applicability-manual.https.html": [ + "bbed9a382c8e9a9a26f7690b06fdbffc5ef4a794", + "manual" + ], + "wake-lock/wakelock-cancel-twice.https-expected.txt": [ + "b0a5425f36a26991382f7deaa17f0262530aeddb", + "support" + ], + "wake-lock/wakelock-cancel-twice.https.html": [ + "a9850a6eb525af1c37e06686df1b8a075f2456f8", "testharness" ], "wake-lock/wakelock-disabled-by-feature-policy.https.sub-expected.txt": [ @@ -334012,19 +334067,27 @@ "support" ], "wake-lock/wakelock-disabled-by-feature-policy.https.sub.html": [ - "5ba667dc3f35e64b39be7cc938cf1cb93fc6f464", + "d3786da8619cfc0409f979235af29e587e4c41bc", "testharness" ], "wake-lock/wakelock-disabled-by-feature-policy.https.sub.html.headers": [ "199fe1ce290a8570204cc58027f7b808d7ef3500", "support" ], + "wake-lock/wakelock-document-hidden.https-expected.txt": [ + "34fda95115e3de9c927032516d9b996f9584a90f", + "support" + ], + "wake-lock/wakelock-document-hidden.https.html": [ + "ae8838e5fb164218f7dbf431546ed20b820f7c0c", + "testharness" + ], "wake-lock/wakelock-enabled-by-feature-policy-attribute-redirect-on-load.https.sub-expected.txt": [ "b9b36598f6223282e87cdd447354edb1b2630587", "support" ], "wake-lock/wakelock-enabled-by-feature-policy-attribute-redirect-on-load.https.sub.html": [ - "bba2a95be9eeba9a4b67a9db92dc7d793fc26759", + "6f7fd8d684092ad53058a2bdfe4ae4070a18e290", "testharness" ], "wake-lock/wakelock-enabled-by-feature-policy-attribute.https.sub-expected.txt": [ @@ -334032,7 +334095,7 @@ "support" ], "wake-lock/wakelock-enabled-by-feature-policy-attribute.https.sub.html": [ - "37f30f21addedbe30955eefe22f65302a2a97ed5", + "ca6f005d18f1193fc1bc141d58e76248e93b66d8", "testharness" ], "wake-lock/wakelock-enabled-by-feature-policy.https.sub-expected.txt": [ @@ -334040,7 +334103,7 @@ "support" ], "wake-lock/wakelock-enabled-by-feature-policy.https.sub.html": [ - "ee3386a75ce86ebec42032712acde03ebc064eda", + "98b988fc7fd156c756c4c430f2c50cd0110a124a", "testharness" ], "wake-lock/wakelock-enabled-by-feature-policy.https.sub.html.headers": [ @@ -334052,19 +334115,23 @@ "support" ], "wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html": [ - "328c6459efefdb2ed1f33522c8c51c5aa2aa1496", + "f928dc7732050e52152ccfb1c5a9a4282216b70f", "testharness" ], "wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html.headers": [ "7a77973dc947ef10abe33be288fd610c42d96e97", "support" ], + "wake-lock/wakelock-insecure-context.html": [ + "527a75868eab39b899113cae81601630f9850790", + "testharness" + ], "wake-lock/wakelock-object-is-independent.https-expected.txt": [ "9f2c345a6fb831bc47a611af405f2bc0311a7fed", "support" ], "wake-lock/wakelock-object-is-independent.https.html": [ - "b104d9af062710134b69474008b583706eee7978", + "7db6e3ce66953a719bda56bf0ecee5a8d26a7292", "testharness" ], "wake-lock/wakelock-onactivechange.https-expected.txt": [ @@ -334072,7 +334139,7 @@ "support" ], "wake-lock/wakelock-onactivechange.https.html": [ - "c85d61aca951edc5378028c1c120222683744de6", + "cbf4c5d6351e01ccc1a3e0e3e05afb16968a7edd", "testharness" ], "wake-lock/wakelock-type.https-expected.txt": [ @@ -334080,7 +334147,7 @@ "support" ], "wake-lock/wakelock-type.https.html": [ - "6fac8079855d7aedb52aee508cb866de51c41c0c", + "583647213b49b7bc67cad08192db3e6abcd1de9f", "testharness" ], "wasm/OWNERS": [ @@ -334216,7 +334283,7 @@ "testharness" ], "web-animations/interfaces/Animatable/animate-expected.txt": [ - "707c644d1e5279e7095a7a305ea3bc027fdebcb8", + "f2e65323cc15eb82b823b690c9d0c17af75f40a5", "support" ], "web-animations/interfaces/Animatable/animate-no-browsing-context-expected.txt": [ @@ -334388,7 +334455,7 @@ "testharness" ], "web-animations/interfaces/KeyframeEffect/composite-expected.txt": [ - "5d6cef64e481d6e8b69f6185ce28b91df51ce56f", + "c0ce440ef3789beb3a286bd7ca17e8c6ba93b792", "support" ], "web-animations/interfaces/KeyframeEffect/composite.html": [ @@ -334396,7 +334463,7 @@ "testharness" ], "web-animations/interfaces/KeyframeEffect/constructor-expected.txt": [ - "d99b9c7011dfcff6e549fedde0373904ca300d01", + "9cc22f3feaca7e591174fb228a7aeef4555d37fd", "support" ], "web-animations/interfaces/KeyframeEffect/constructor.html": [ @@ -334420,7 +334487,7 @@ "testharness" ], "web-animations/interfaces/KeyframeEffect/idlharness-expected.txt": [ - "d7766e1ed6c7c5dd32b4ca6460019108ca8c4a46", + "93130453baea226469caa4968ea606fb451dc463", "support" ], "web-animations/interfaces/KeyframeEffect/idlharness.html": [ @@ -334436,7 +334503,7 @@ "testharness" ], "web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument-001-expected.txt": [ - "9c2cf2cc6957e6b5a22790dcd0adffea335b3b9a", + "88a298fef74ba67db89a318016d6a669e28522e4", "support" ], "web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument-001.html": [ @@ -334444,7 +334511,7 @@ "testharness" ], "web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument-002-expected.txt": [ - "136ca9ffd56cc7ad79aa9a1810217178a528cfac", + "e1bdc2f4e3956dc0fd6cb498419e5a43855a7a12", "support" ], "web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument-002.html": [
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-contain/contain-style-counters-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-contain/contain-style-counters-ref.html similarity index 100% rename from third_party/WebKit/LayoutTests/external/wpt/css-contain/contain-style-counters-ref.html rename to third_party/WebKit/LayoutTests/external/wpt/css/css-contain/contain-style-counters-ref.html
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-contain/contain-style-counters.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-contain/contain-style-counters.html similarity index 100% rename from third_party/WebKit/LayoutTests/external/wpt/css-contain/contain-style-counters.html rename to third_party/WebKit/LayoutTests/external/wpt/css/css-contain/contain-style-counters.html
diff --git a/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-api.https.html b/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-api.https.html index bce4e149..00d5b19 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-api.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-api.https.html
@@ -2,8 +2,8 @@ <meta charset="utf-8"> <title>Wake Lock API Test</title> <link rel="help" href="https://w3c.github.io/wake-lock/"> -<script src=/resources/testharness.js></script> -<script src=/resources/testharnessreport.js></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> <script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-applicability-manual.https-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-applicability-manual.https-expected.txt new file mode 100644 index 0000000..86dbd74 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-applicability-manual.https-expected.txt
@@ -0,0 +1,5 @@ +This is a testharness.js-based test. +FAIL The screen wake lock isn't applicable after the screen is manually swiched off by the user until it is switched on again. promise_test: Unhandled rejection with value: object "TypeError: navigator.getWakeLock is not a function" +FAIL Manually switching off the screen will not affect the applicability of the system wake lock. promise_test: Unhandled rejection with value: object "TypeError: navigator.getWakeLock is not a function" +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-applicability-manual.https.html b/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-applicability-manual.https.html new file mode 100644 index 0000000..5dbd278 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-applicability-manual.https.html
@@ -0,0 +1,51 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>wake lock applicability test</title> +<link rel="help" href="https://w3c.github.io/wake-lock/#dfn-the-wake-lock-is-applicable"> +<meta name="flags" content="interact"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<p> + Lock and turn off the screen, then turn on and unlock the screen. +</p> +<p> + Note: All the actions need to be done in 60 seconds, otherwise it will get TIMEOUT. +</p> +<script> + +setup({ explicit_timeout: true }); + +promise_test(async t => { + const wakeLock = await navigator.getWakeLock("screen"); + const request = wakeLock.createRequest(); + assert_true(wakeLock.active, "the active is true when wake lock is acquired"); + const eventWatcher = new EventWatcher(t, document, "visibilitychange") + + //lock screen to fire 'visibilitychange' + await eventWatcher.wait_for("visibilitychange"); + assert_true(document.hidden, "document is hidden when screen is locked"); + assert_false(wakeLock.active, "the screen wake lock is not active when screen is switched off"); + + //unlock screen to fire 'visibilitychange' + await eventWatcher.wait_for("visibilitychange"); + assert_false(document.hidden, "document is visiable when screen is unlocked"); + assert_true(wakeLock.active, "the screen wake lock is active when screen is switched on again"); + request.cancel(); +}, "The screen wake lock isn't applicable after the screen is manually swiched off" + + " by the user until it is switched on again."); + + +promise_test(async t => { + const wakeLock = await navigator.getWakeLock("system"); + const request = wakeLock.createRequest(); + assert_true(wakeLock.active, "the active is true when wake lock is acquired"); + const eventWatcher = new EventWatcher(t, document, "visibilitychange") + + //lock screen to fire 'visibilitychange' + await eventWatcher.wait_for("visibilitychange"); + assert_true(document.hidden, "document is hidden when screen is locked"); + assert_true(wakeLock.active, "the system wake lock is still active when screen is switched off"); + request.cancel(); +}, "Manually switching off the screen will not affect the applicability of the system wake lock."); + +</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-cancel-twice.https-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-cancel-twice.https-expected.txt new file mode 100644 index 0000000..ffcce73a --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-cancel-twice.https-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL no exception is thrown when invoking cancel() twice promise_test: Unhandled rejection with value: object "TypeError: navigator.getWakeLock is not a function" +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-cancel-twice.https.html b/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-cancel-twice.https.html new file mode 100644 index 0000000..68e8a195 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-cancel-twice.https.html
@@ -0,0 +1,20 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>no exception is thrown when invoking cancel() twice</title> +<link rel="help" href="https://w3c.github.io/wake-lock/#dom-wakelockrequest-cancel"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + +promise_test(async t => { + const wakeLock = await navigator.getWakeLock("screen"); + const request = wakeLock.createRequest(); + assert_true(wakeLock.active, "the activate is true when wake lock is acquired"); + request.cancel(); + assert_false(wakeLock.active, "the activate is false when wake lock is released"); + //If the cancel() method has already been invoked on this object, + //abort these steps, no error fired + request.cancel(); +}, "no exception is thrown when invoking cancel() twice"); + +</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-disabled-by-feature-policy.https.sub.html b/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-disabled-by-feature-policy.https.sub.html index 440e793..75064767 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-disabled-by-feature-policy.https.sub.html +++ b/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-disabled-by-feature-policy.https.sub.html
@@ -1,8 +1,8 @@ <!DOCTYPE html> <body> -<script src=/resources/testharness.js></script> -<script src=/resources/testharnessreport.js></script> -<script src=/feature-policy/resources/featurepolicy.js></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/feature-policy/resources/featurepolicy.js"></script> <script> "use strict";
diff --git a/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-document-hidden.https-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-document-hidden.https-expected.txt new file mode 100644 index 0000000..e40f1fd --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-document-hidden.https-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL Test that screen wake lock will not be actived in hidden document promise_test: Unhandled rejection with value: object "TypeError: navigator.getWakeLock is not a function" +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-document-hidden.https.html b/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-document-hidden.https.html new file mode 100644 index 0000000..6bb406a1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-document-hidden.https.html
@@ -0,0 +1,27 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>screen wake lock will not be actived in hidden document</title> +<link rel="help" href="https://w3c.github.io/wake-lock/#dfn-requesting-the-wake-lock"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + +promise_test(async t => { + const wakeLock = await navigator.getWakeLock("screen"); + const request = wakeLock.createRequest(); + assert_true(wakeLock.active, "the active is true when wake lock is acquired"); + const eventWatcher = new EventWatcher(t, document, "visibilitychange"); + const win = window.open("about:blank", "_blank"); + + await eventWatcher.wait_for("visibilitychange"); + assert_true(document.hidden, "document is hidden when new window is opened"); + assert_false(wakeLock.active, "the active is false when document is hidden"); + win.close(); + + await eventWatcher.wait_for("visibilitychange"); + assert_false(document.hidden, "document is visiable when new window is closed"); + assert_true(wakeLock.active, "the active is true when document regains visibility"); + request.cancel(); +}, "Test that screen wake lock will not be actived in hidden document"); + +</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-enabled-by-feature-policy-attribute-redirect-on-load.https.sub.html b/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-enabled-by-feature-policy-attribute-redirect-on-load.https.sub.html index 24502f1eb..74875937 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-enabled-by-feature-policy-attribute-redirect-on-load.https.sub.html +++ b/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-enabled-by-feature-policy-attribute-redirect-on-load.https.sub.html
@@ -1,8 +1,8 @@ <!DOCTYPE html> <body> -<script src=/resources/testharness.js></script> -<script src=/resources/testharnessreport.js></script> -<script src=/feature-policy/resources/featurepolicy.js></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/feature-policy/resources/featurepolicy.js"></script> <script> "use strict";
diff --git a/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-enabled-by-feature-policy-attribute.https.sub.html b/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-enabled-by-feature-policy-attribute.https.sub.html index 36cfaca..185f5ad1 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-enabled-by-feature-policy-attribute.https.sub.html +++ b/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-enabled-by-feature-policy-attribute.https.sub.html
@@ -1,8 +1,8 @@ <!DOCTYPE html> <body> -<script src=/resources/testharness.js></script> -<script src=/resources/testharnessreport.js></script> -<script src=/feature-policy/resources/featurepolicy.js></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/feature-policy/resources/featurepolicy.js"></script> <script> "use strict";
diff --git a/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-enabled-by-feature-policy.https.sub.html b/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-enabled-by-feature-policy.https.sub.html index 83c63fb..eb49be5 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-enabled-by-feature-policy.https.sub.html +++ b/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-enabled-by-feature-policy.https.sub.html
@@ -1,8 +1,8 @@ <!DOCTYPE html> <body> -<script src=/resources/testharness.js></script> -<script src=/resources/testharnessreport.js></script> -<script src=/feature-policy/resources/featurepolicy.js></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/feature-policy/resources/featurepolicy.js"></script> <script> "use strict";
diff --git a/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html b/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html index 646d8680..dbd8ec9 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html +++ b/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html
@@ -1,8 +1,8 @@ <!DOCTYPE html> <body> -<script src=/resources/testharness.js></script> -<script src=/resources/testharnessreport.js></script> -<script src=/feature-policy/resources/featurepolicy.js></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/feature-policy/resources/featurepolicy.js"></script> <script> "use strict";
diff --git a/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-insecure-context.html b/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-insecure-context.html new file mode 100644 index 0000000..8d728f8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-insecure-context.html
@@ -0,0 +1,13 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Wake Lock API is not exposed in an insecure context</title> +<link rel="help" href="https://w3c.github.io/wake-lock/#wake-locks"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + +test(t => { + assert_false("getWakeLock" in navigator, "'getWakeLock' must not be exposed"); +}, "Wake Lock API is not exposed in an insecure context"); + +</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-object-is-independent.https.html b/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-object-is-independent.https.html index c781830..f0493ee 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-object-is-independent.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-object-is-independent.https.html
@@ -2,8 +2,8 @@ <meta charset="utf-8"> <title>WakeLock object is independent</title> <link rel="help" href="https://w3c.github.io/wake-lock/"> -<script src=/resources/testharness.js></script> -<script src=/resources/testharnessreport.js></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> <body> <script id="iframe" type="text/plain">
diff --git a/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-onactivechange.https.html b/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-onactivechange.https.html index dc5c7ebe..899b9b78 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-onactivechange.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-onactivechange.https.html
@@ -2,8 +2,8 @@ <meta charset="utf-8"> <title>Wake Lock 'onactivechange' Test</title> <link rel="help" href="https://w3c.github.io/wake-lock/"> -<script src=/resources/testharness.js></script> -<script src=/resources/testharnessreport.js></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> <script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-type.https.html b/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-type.https.html index 969e2f2..70aa129a 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-type.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/wake-lock/wakelock-type.https.html
@@ -2,8 +2,8 @@ <meta charset="utf-8"> <title>WakeLockType Test</title> <link rel="help" href="https://w3c.github.io/wake-lock/"> -<script src=/resources/testharness.js></script> -<script src=/resources/testharnessreport.js></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> <script>
diff --git a/third_party/WebKit/Source/core/html/HTMLFrameSetElement.cpp b/third_party/WebKit/Source/core/html/HTMLFrameSetElement.cpp index 1d6bc21..da5eca7 100644 --- a/third_party/WebKit/Source/core/html/HTMLFrameSetElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLFrameSetElement.cpp
@@ -31,6 +31,7 @@ #include "core/events/MouseEvent.h" #include "core/frame/LocalFrame.h" #include "core/frame/LocalFrameClient.h" +#include "core/frame/UseCounter.h" #include "core/html/HTMLCollection.h" #include "core/html/HTMLFrameElement.h" #include "core/html_names.h" @@ -297,7 +298,13 @@ Document* document = ToHTMLFrameElement(frame_element)->contentDocument(); if (!document || !document->GetFrame()) return nullptr; - return document->domWindow(); + + LocalDOMWindow* window = document->domWindow(); + if (window) { + UseCounter::Count( + *document, WebFeature::kHTMLFrameSetElementNonNullAnonymousNamedGetter); + } + return window; } } // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/ng/geometry/ng_physical_offset.cc b/third_party/WebKit/Source/core/layout/ng/geometry/ng_physical_offset.cc index 3b8269f..de468e7 100644 --- a/third_party/WebKit/Source/core/layout/ng/geometry/ng_physical_offset.cc +++ b/third_party/WebKit/Source/core/layout/ng/geometry/ng_physical_offset.cc
@@ -74,6 +74,10 @@ NGPhysicalOffset::NGPhysicalOffset(const LayoutPoint& source) : left(source.X()), top(source.Y()) {} +LayoutPoint NGPhysicalOffset::ToLayoutPoint() const { + return {left, top}; +} + String NGPhysicalOffset::ToString() const { return String::Format("%d,%d", left.ToInt(), top.ToInt()); }
diff --git a/third_party/WebKit/Source/core/layout/ng/geometry/ng_physical_offset.h b/third_party/WebKit/Source/core/layout/ng/geometry/ng_physical_offset.h index e8d29a6..db136a35 100644 --- a/third_party/WebKit/Source/core/layout/ng/geometry/ng_physical_offset.h +++ b/third_party/WebKit/Source/core/layout/ng/geometry/ng_physical_offset.h
@@ -46,6 +46,10 @@ // logical/physical distinctions. explicit NGPhysicalOffset(const LayoutPoint&); + // Conversions from/to existing code. New code prefers type safety for + // logical/physical distinctions. + LayoutPoint ToLayoutPoint() const; + String ToString() const; };
diff --git a/third_party/WebKit/Source/modules/media_capabilities/MediaCapabilities.idl b/third_party/WebKit/Source/modules/media_capabilities/MediaCapabilities.idl index 21def833..92971bcb 100644 --- a/third_party/WebKit/Source/modules/media_capabilities/MediaCapabilities.idl +++ b/third_party/WebKit/Source/modules/media_capabilities/MediaCapabilities.idl
@@ -6,7 +6,7 @@ [ Exposed=Window, - RuntimeEnabled=MediaCapabilities + OriginTrialEnabled=MediaCapabilities ] interface MediaCapabilities { [CallWith=ScriptState] Promise<MediaCapabilitiesInfo> decodingInfo(MediaDecodingConfiguration configuration); [CallWith=ScriptState] Promise<MediaCapabilitiesInfo> encodingInfo(
diff --git a/third_party/WebKit/Source/modules/media_capabilities/MediaCapabilitiesInfo.idl b/third_party/WebKit/Source/modules/media_capabilities/MediaCapabilitiesInfo.idl index 6feab9a..3c4bdc5 100644 --- a/third_party/WebKit/Source/modules/media_capabilities/MediaCapabilitiesInfo.idl +++ b/third_party/WebKit/Source/modules/media_capabilities/MediaCapabilitiesInfo.idl
@@ -6,7 +6,7 @@ [ Exposed=Window, - RuntimeEnabled=MediaCapabilities + OriginTrialEnabled=MediaCapabilities ] interface MediaCapabilitiesInfo { readonly attribute boolean supported; readonly attribute boolean smooth;
diff --git a/third_party/WebKit/Source/modules/media_capabilities/NavigatorMediaCapabilities.idl b/third_party/WebKit/Source/modules/media_capabilities/NavigatorMediaCapabilities.idl index ed04a7e..5f421af 100644 --- a/third_party/WebKit/Source/modules/media_capabilities/NavigatorMediaCapabilities.idl +++ b/third_party/WebKit/Source/modules/media_capabilities/NavigatorMediaCapabilities.idl
@@ -7,7 +7,7 @@ [ Exposed=Window, ImplementedAs=NavigatorMediaCapabilities, - RuntimeEnabled=MediaCapabilities + OriginTrialEnabled=MediaCapabilities ] partial interface Navigator { [SameObject] readonly attribute MediaCapabilities mediaCapabilities; };
diff --git a/third_party/WebKit/Source/platform/runtime_enabled_features.json5 b/third_party/WebKit/Source/platform/runtime_enabled_features.json5 index 9d4dbc8..623c1b5 100644 --- a/third_party/WebKit/Source/platform/runtime_enabled_features.json5 +++ b/third_party/WebKit/Source/platform/runtime_enabled_features.json5
@@ -564,6 +564,7 @@ }, { name: "MediaCapabilities", + origin_trial_feature_name: "MediaCapabilities", status: "experimental", }, {
diff --git a/third_party/WebKit/public/platform/web_feature.mojom b/third_party/WebKit/public/platform/web_feature.mojom index d30652d..ddc619b 100644 --- a/third_party/WebKit/public/platform/web_feature.mojom +++ b/third_party/WebKit/public/platform/web_feature.mojom
@@ -1760,6 +1760,7 @@ kLinkRelModulePreload = 2232, kPerformanceMeasurePassedInObject = 2233, kPerformanceMeasurePassedInNavigationTiming = 2234, + kHTMLFrameSetElementNonNullAnonymousNamedGetter = 2235, // Add new features immediately above this line. Don't change assigned // numbers of any item, and don't reuse removed slots.
diff --git a/tools/android/BUILD.gn b/tools/android/BUILD.gn index 8ad3d39..3fdc092d 100644 --- a/tools/android/BUILD.gn +++ b/tools/android/BUILD.gn
@@ -17,6 +17,7 @@ "//tools/android/md5sum", "//tools/android/memtrack_helper:memtrack_helper", "//tools/perf:run_benchmark_wrapper", + "//tools/perf/clear_system_cache", ] }
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 4af0aec..43a4faf 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -16975,6 +16975,7 @@ <int value="2232" label="LinkRelModulePreload"/> <int value="2233" label="PerformanceMeasurePassedInObject"/> <int value="2234" label="PerformanceMeasurePassedInNavigationTiming"/> + <int value="2235" label="HTMLFrameSetElementNonNullAnonymousNamedGetter"/> </enum> <enum name="FeedbackSource">
diff --git a/ui/PRESUBMIT.py b/ui/PRESUBMIT.py index 2f2d842..2cd860d 100644 --- a/ui/PRESUBMIT.py +++ b/ui/PRESUBMIT.py
@@ -41,10 +41,35 @@ (f.LocalPath(), line_number))) return errors +def CheckX11HeaderUsage(input_api, output_api): + """X11 headers pollute the global namespace with macros for common +names so instead code should include "ui/gfx/x/x11.h" which hide the +dangerous macros inside the x11 namespace.""" + + # Only check files in ui/gl and ui/gfx for now since that is the + # only code converted. + + source_file_filter = lambda x: input_api.FilterSourceFile( + x, + white_list=tuple([r'.*ui.(gfx|gl)..*\.(cc|h)$'])) + errors = [] + x11_include_pattern = input_api.re.compile(r'#include\s+<X11/.*\.h>') + for f in input_api.AffectedSourceFiles(source_file_filter): + if f.LocalPath().endswith(input_api.os_path.normpath("ui/gfx/x11.h")): + # This is the only file that is allowed to include X11 headers. + continue + for line_number, line in f.ChangedContents(): + if input_api.re.search(x11_include_pattern, line): + errors.append(output_api.PresubmitError( + '%s:%d includes an X11 header. Include "ui/gfx/x/x11.h" instead.' % + (f.LocalPath(), line_number))) + return errors + def CheckChange(input_api, output_api): results = [] results += CheckUniquePtr(input_api, output_api) + results += CheckX11HeaderUsage(input_api, output_api) return results
diff --git a/ui/accessibility/platform/ax_platform_node_auralinux.cc b/ui/accessibility/platform/ax_platform_node_auralinux.cc index f41ac3d..60b5a12 100644 --- a/ui/accessibility/platform/ax_platform_node_auralinux.cc +++ b/ui/accessibility/platform/ax_platform_node_auralinux.cc
@@ -8,6 +8,7 @@ #include "base/command_line.h" #include "base/strings/sys_string_conversions.h" +#include "ui/accessibility/ax_action_data.h" #include "ui/accessibility/ax_node_data.h" #include "ui/accessibility/platform/atk_util_auralinux.h" #include "ui/accessibility/platform/ax_platform_node_delegate.h" @@ -286,12 +287,25 @@ return obj->HitTestSync(x, y, coord_type); } +static gboolean ax_platform_node_auralinux_grab_focus( + AtkComponent* atk_component) { + g_return_val_if_fail(ATK_IS_COMPONENT(atk_component), FALSE); + AtkObject* atk_object = ATK_OBJECT(atk_component); + ui::AXPlatformNodeAuraLinux* obj = + AtkObjectToAXPlatformNodeAuraLinux(atk_object); + if (!obj) + return FALSE; + + return obj->GrabFocus(); +} + void ax_component_interface_base_init(AtkComponentIface* iface) { iface->get_extents = ax_platform_node_auralinux_get_extents; iface->get_position = ax_platform_node_auralinux_get_position; iface->get_size = ax_platform_node_auralinux_get_size; iface->ref_accessible_at_point = ax_platform_node_auralinux_ref_accessible_at_point; + iface->grab_focus = ax_platform_node_auralinux_grab_focus; } static const GInterfaceInfo ComponentInfo = { @@ -777,4 +791,10 @@ return delegate_->HitTestSync(x, y); } +bool AXPlatformNodeAuraLinux::GrabFocus() { + AXActionData action_data; + action_data.action = AX_ACTION_FOCUS; + return delegate_->AccessibilityPerformAction(action_data); +} + } // namespace ui
diff --git a/ui/accessibility/platform/ax_platform_node_auralinux.h b/ui/accessibility/platform/ax_platform_node_auralinux.h index 015487be..5fc52ba 100644 --- a/ui/accessibility/platform/ax_platform_node_auralinux.h +++ b/ui/accessibility/platform/ax_platform_node_auralinux.h
@@ -36,6 +36,7 @@ gfx::NativeViewAccessible HitTestSync(gint x, gint y, AtkCoordType coord_type); + bool GrabFocus(); void SetExtentsRelativeToAtkCoordinateType( gint* x, gint* y, gint* width, gint* height,
diff --git a/ui/gfx/x/x11.h b/ui/gfx/x/x11.h index 1cf3db8..1e51aff4 100644 --- a/ui/gfx/x/x11.h +++ b/ui/gfx/x/x11.h
@@ -15,13 +15,6 @@ // central X11 headers can be included. #include <X11/Xlib.h> -// TODO(bratell): ui/gl headers sometimes indirectly include Xlib.h -// and then undef Bool. If that has happened, then the include above -// has no effect and Bool will be missing for the rest of the -// includes. This will be fixed when ui/gl uses ui/gfx/x/x11.h (this -// file) but it's not 100% trivial. -#define Bool int - // And the rest so that nobody needs to include them manually... #include <X11/Xatom.h> #include <X11/Xcursor/Xcursor.h>
diff --git a/ui/gl/gl_bindings.cc b/ui/gl/gl_bindings.cc index 05c4549..52e4515 100644 --- a/ui/gl/gl_bindings.cc +++ b/ui/gl/gl_bindings.cc
@@ -4,6 +4,10 @@ #include "build/build_config.h" +#if defined(USE_X11) +#include "ui/gfx/x/x11.h" +#endif // USE_X11 + #if defined(USE_EGL) #include <EGL/egl.h> #endif @@ -11,7 +15,7 @@ #include "ui/gl/gl_bindings.h" #if defined(USE_GLX) -#include "ui/gfx/x/x11_types.h" // nogncheck +#include "ui/gfx/x/x11_types.h" #endif #if defined(OS_WIN)
diff --git a/ui/gl/gl_bindings.h b/ui/gl/gl_bindings.h index 54d47c2..2fc96618 100644 --- a/ui/gl/gl_bindings.h +++ b/ui/gl/gl_bindings.h
@@ -5,10 +5,9 @@ #ifndef UI_GL_GL_BINDINGS_H_ #define UI_GL_GL_BINDINGS_H_ +#include "build/build_config.h" + // Includes the platform independent and platform dependent GL headers. -// Only include this in cc files. It pulls in system headers, including -// the X11 headers on linux, which define all kinds of macros that are -// liable to cause conflicts. // GL headers may include inttypes.h and so we need to ensure that // __STDC_FORMAT_MACROS is defined in order for //base/format_macros.h to @@ -17,6 +16,17 @@ #if defined(OS_POSIX) && !defined(__STDC_FORMAT_MACROS) #define __STDC_FORMAT_MACROS #endif +#if defined(USE_GLX) +// Must be included before GL headers or they might pollute the global +// namespace with X11 macros indirectly. +#include "ui/gfx/x/x11.h" + +// GL headers expect Bool and Status this to be defined but we avoid +// defining them since they clash with too much code. Instead we have +// to add them temporarily here and undef them again below. +#define Bool int +#define Status int +#endif // USE_GLX #include <GL/gl.h> #include <GL/glext.h> @@ -40,14 +50,11 @@ #elif defined(USE_GLX) #include <GL/glx.h> #include <GL/glxext.h> -#endif -// Undefine some macros defined by X headers. This is why this file should only -// be included in .cc files. +// Done with these temporary macros now #undef Bool -#undef None #undef Status - +#endif // GLES2 defines not part of Desktop GL // Shader Precision-Specified Types
diff --git a/ui/gl/gl_context_egl.cc b/ui/gl/gl_context_egl.cc index 5f8ff35..8e7043a 100644 --- a/ui/gl/gl_context_egl.cc +++ b/ui/gl/gl_context_egl.cc
@@ -10,17 +10,19 @@ #include "base/logging.h" #include "base/trace_event/trace_event.h" #include "build/build_config.h" + +#if defined(USE_X11) +// Must be included before khronos headers or they will pollute the +// global scope with X11 macros. +#include "ui/gfx/x/x11.h" +#endif + #include "third_party/khronos/EGL/egl.h" #include "third_party/khronos/EGL/eglext.h" #include "ui/gl/egl_util.h" #include "ui/gl/gl_bindings.h" #include "ui/gl/gl_surface_egl.h" -#if defined(USE_X11) -extern "C" { -#include <X11/Xlib.h> -} -#endif #ifndef EGL_CHROMIUM_create_context_bind_generates_resource #define EGL_CHROMIUM_create_context_bind_generates_resource 1
diff --git a/ui/gl/gl_context_glx.cc b/ui/gl/gl_context_glx.cc index b185b2c..abbe288 100644 --- a/ui/gl/gl_context_glx.cc +++ b/ui/gl/gl_context_glx.cc
@@ -4,15 +4,13 @@ #include "ui/gl/gl_context_glx.h" -extern "C" { -#include <X11/Xlib.h> -} #include <memory> #include "base/command_line.h" #include "base/logging.h" #include "base/numerics/safe_conversions.h" #include "base/trace_event/trace_event.h" +#include "ui/gfx/x/x11.h" #include "ui/gl/GL/glextchromium.h" #include "ui/gl/gl_bindings.h" #include "ui/gl/gl_implementation.h" @@ -59,10 +57,10 @@ // errors can be generated. To prevent these errors from crashing our process, // we simply ignore them and only look if the GLXContext was created. // Sync to ensure any errors generated are processed. - XSync(display, False); + XSync(display, x11::False); auto old_error_handler = XSetErrorHandler(IgnoreX11Errors); - GLXContext context = - glXCreateContextAttribsARB(display, config, share, True, attribs.data()); + GLXContext context = glXCreateContextAttribsARB(display, config, share, + x11::True, attribs.data()); XSetErrorHandler(old_error_handler); return context; @@ -183,11 +181,8 @@ } else { DVLOG(1) << "GLX_ARB_create_context not supported."; context_ = glXCreateNewContext( - display_, - static_cast<GLXFBConfig>(compatible_surface->GetConfig()), - GLX_RGBA_TYPE, - share_handle, - True); + display_, static_cast<GLXFBConfig>(compatible_surface->GetConfig()), + GLX_RGBA_TYPE, share_handle, x11::True); if (!context_) { LOG(ERROR) << "Failed to create GL context with glXCreateNewContext."; return false;
diff --git a/ui/gl/gl_context_glx_unittest.cc b/ui/gl/gl_context_glx_unittest.cc index f840106..25478c7 100644 --- a/ui/gl/gl_context_glx_unittest.cc +++ b/ui/gl/gl_context_glx_unittest.cc
@@ -6,14 +6,13 @@ #include "base/memory/scoped_refptr.h" #include "testing/gtest/include/gtest/gtest.h" +#include "ui/gfx/x/x11.h" #include "ui/gfx/x/x11_error_tracker.h" #include "ui/gfx/x/x11_types.h" #include "ui/gl/gl_surface_glx_x11.h" #include "ui/gl/init/gl_factory.h" #include "ui/gl/test/gl_image_test_support.h" -#include <X11/Xlib.h> - namespace gl { TEST(GLContextGLXTest, DoNotDestroyOnFailedMakeCurrent) { @@ -25,7 +24,7 @@ XSetWindowAttributes swa; memset(&swa, 0, sizeof(swa)); swa.background_pixmap = 0; - swa.override_redirect = True; + swa.override_redirect = x11::True; auto xwindow = XCreateWindow(xdisplay, DefaultRootWindow(xdisplay), 0, 0, 10, 10, // x, y, width, height 0, // border width @@ -77,7 +76,7 @@ // not destroyed. ASSERT_TRUE(context->GetHandle()); surface = nullptr; - XSync(xdisplay, True); + XSync(xdisplay, x11::True); } } // namespace gl
diff --git a/ui/gl/gl_image_glx.cc b/ui/gl/gl_image_glx.cc index 341e33d..4c4ba1a2 100644 --- a/ui/gl/gl_image_glx.cc +++ b/ui/gl/gl_image_glx.cc
@@ -2,13 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -extern "C" { -#include <X11/Xlib.h> -} - #include <memory> #include "base/logging.h" +#include "ui/gfx/x/x11.h" #include "ui/gl/gl_bindings.h" #include "ui/gl/gl_image_glx.h" #include "ui/gl/gl_surface_glx.h"
diff --git a/ui/gl/gl_surface_egl.cc b/ui/gl/gl_surface_egl.cc index 5fc0277..c84994b 100644 --- a/ui/gl/gl_surface_egl.cc +++ b/ui/gl/gl_surface_egl.cc
@@ -35,10 +35,8 @@ #include "ui/gl/sync_control_vsync_provider.h" #if defined(USE_X11) -extern "C" { -#include <X11/Xlib.h> -#define Status int -} +#include "ui/gfx/x/x11.h" + #include "ui/base/x/x11_util_internal.h" // nogncheck #endif
diff --git a/ui/gl/gl_surface_egl_x11.cc b/ui/gl/gl_surface_egl_x11.cc index 4d0cd090..78fa83f 100644 --- a/ui/gl/gl_surface_egl_x11.cc +++ b/ui/gl/gl_surface_egl_x11.cc
@@ -5,12 +5,9 @@ #include "ui/gl/gl_surface_egl_x11.h" #include "ui/events/platform/platform_event_source.h" +#include "ui/gfx/x/x11.h" #include "ui/gl/egl_util.h" -extern "C" { -#include <X11/Xlib.h> -} - using ui::GetLastEGLErrorString; using ui::PlatformEvent; using ui::PlatformEventSource; @@ -167,7 +164,7 @@ x_event.xexpose.window = parent_window_; Display* x11_display = GetNativeDisplay(); - XSendEvent(x11_display, parent_window_, False, ExposureMask, &x_event); + XSendEvent(x11_display, parent_window_, x11::False, ExposureMask, &x_event); XFlush(x11_display); return ui::POST_DISPATCH_STOP_PROPAGATION; }
diff --git a/ui/gl/gl_surface_glx.cc b/ui/gl/gl_surface_glx.cc index e647e4c..529941fa 100644 --- a/ui/gl/gl_surface_glx.cc +++ b/ui/gl/gl_surface_glx.cc
@@ -4,9 +4,6 @@ #include "ui/gl/gl_surface_glx.h" -extern "C" { -#include <X11/Xlib.h> -} #include <memory> #include "base/command_line.h" @@ -25,6 +22,7 @@ #include "base/trace_event/trace_event.h" #include "build/build_config.h" #include "ui/events/platform/platform_event_source.h" +#include "ui/gfx/x/x11.h" #include "ui/gfx/x/x11_connection.h" #include "ui/gfx/x/x11_types.h" #include "ui/gl/gl_bindings.h" @@ -115,7 +113,7 @@ bool CreateDummyWindow(Display* display) { DCHECK(display); gfx::AcceleratedWidget parent_window = - RootWindow(display, DefaultScreen(display)); + XRootWindow(display, DefaultScreen(display)); gfx::AcceleratedWidget window = XCreateWindow(display, parent_window, 0, 0, 1, 1, 0, CopyFromParent, InputOutput, CopyFromParent, 0, nullptr); @@ -217,7 +215,7 @@ vsync_lock_() { // This ensures that creation of |parent_window_| has occured when this shim // is executing in the same thread as the call to create |parent_window_|. - XSync(g_display, False); + XSync(g_display, x11::False); } virtual ~SGIVideoSyncProviderThreadShim() { @@ -257,8 +255,8 @@ // Create the context only once for all vsync providers. if (!context_) { - context_ = - glXCreateNewContext(display_, config, GLX_RGBA_TYPE, nullptr, True); + context_ = glXCreateNewContext(display_, config, GLX_RGBA_TYPE, nullptr, + x11::True); if (!context_) LOG(ERROR) << "video_sync: glXCreateNewContext failed"; } @@ -687,7 +685,8 @@ void NativeViewGLSurfaceGLX::ForwardExposeEvent(XEvent* event) { XEvent forwarded_event = *event; forwarded_event.xexpose.window = parent_window_; - XSendEvent(g_display, parent_window_, False, ExposureMask, &forwarded_event); + XSendEvent(g_display, parent_window_, x11::False, ExposureMask, + &forwarded_event); XFlush(g_display); }
diff --git a/ui/gl/gl_surface_glx_x11.cc b/ui/gl/gl_surface_glx_x11.cc index dd912778..39d98e2 100644 --- a/ui/gl/gl_surface_glx_x11.cc +++ b/ui/gl/gl_surface_glx_x11.cc
@@ -4,9 +4,8 @@ #include "ui/gl/gl_surface_glx_x11.h" -#include <X11/Xlib.h> - #include "ui/events/platform/platform_event_source.h" +#include "ui/gfx/x/x11.h" #include "ui/gfx/x/x11_types.h" namespace gl {
diff --git a/ui/gl/gl_surface_osmesa_x11.cc b/ui/gl/gl_surface_osmesa_x11.cc index 988d3c6..130eaac4 100644 --- a/ui/gl/gl_surface_osmesa_x11.cc +++ b/ui/gl/gl_surface_osmesa_x11.cc
@@ -73,7 +73,7 @@ window_graphics_context_ = NULL; } - XSync(xdisplay_, False); + XSync(xdisplay_, x11::False); } bool GLSurfaceOSMesaX11::Resize(const gfx::Size& new_size,
diff --git a/ui/gl/gl_surface_osmesa_x11.h b/ui/gl/gl_surface_osmesa_x11.h index e51fbc8..01f59635 100644 --- a/ui/gl/gl_surface_osmesa_x11.h +++ b/ui/gl/gl_surface_osmesa_x11.h
@@ -5,10 +5,9 @@ #ifndef UI_GL_GL_SURFACE_OSMESA_X11_H_ #define UI_GL_GL_SURFACE_OSMESA_X11_H_ -#include <X11/Xlib.h> - #include "base/macros.h" #include "ui/gfx/native_widget_types.h" +#include "ui/gfx/x/x11.h" #include "ui/gl/gl_export.h" #include "ui/gl/gl_surface.h" #include "ui/gl/gl_surface_osmesa.h"
diff --git a/ui/gl/gl_visual_picker_glx.h b/ui/gl/gl_visual_picker_glx.h index bc0ca178..6ee25f6 100644 --- a/ui/gl/gl_visual_picker_glx.h +++ b/ui/gl/gl_visual_picker_glx.h
@@ -5,11 +5,10 @@ #ifndef UI_GL_GL_VISUAL_PICKER_GLX_H_ #define UI_GL_GL_VISUAL_PICKER_GLX_H_ -#include <X11/Xutil.h> - #include <vector> #include "base/macros.h" +#include "ui/gfx/x/x11.h" #include "ui/gfx/x/x11_types.h" #include "ui/gl/gl_export.h"
diff --git a/ui/gl/init/gl_initializer_x11.cc b/ui/gl/init/gl_initializer_x11.cc index 2392e65..90a62c6 100644 --- a/ui/gl/init/gl_initializer_x11.cc +++ b/ui/gl/init/gl_initializer_x11.cc
@@ -10,6 +10,7 @@ #include "base/threading/thread_restrictions.h" #include "build/build_config.h" #include "ui/gfx/switches.h" +#include "ui/gfx/x/x11.h" #include "ui/gfx/x/x11_types.h" #include "ui/gl/gl_bindings.h" #include "ui/gl/gl_egl_api_implementation.h"
diff --git a/ui/gl/test/gl_surface_test_support.cc b/ui/gl/test/gl_surface_test_support.cc index dcf153b..0ae16504 100644 --- a/ui/gl/test/gl_surface_test_support.cc +++ b/ui/gl/test/gl_surface_test_support.cc
@@ -20,7 +20,7 @@ #endif #if defined(USE_X11) -#include <X11/Xlib.h> +#include "ui/gfx/x/x11.h" #endif namespace gl {