summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordavidben <davidben@chromium.org>2015-08-10 10:18:40 -0700
committerCommit bot <commit-bot@chromium.org>2015-08-10 17:19:23 +0000
commit543bb913c76e73e6548991f48886e8d60633fbdd (patch)
tree9323e78e844124d283bce7aa156b8a4728f4b60b
parent5a689d2d05ce686cbe9d8ef38c379836771f0c8f (diff)
downloadchromium_src-543bb913c76e73e6548991f48886e8d60633fbdd.zip
chromium_src-543bb913c76e73e6548991f48886e8d60633fbdd.tar.gz
chromium_src-543bb913c76e73e6548991f48886e8d60633fbdd.tar.bz2
Fix startup race in initializing DevToolsNetworkController.
DevToolsNetworkController is accessible from the UI half of the Profile, which means that it must be created on the UI thread. It, however, is currently created on the IO, so this doesn't work. Instead, split into the single-threaded controller (no need for a Helper class in unit tests) and a handle which does the cross-thread management. On the UI thread, only DevToolsNetworkControllerHandle may be used. On the IO thread, a Handle may be exchanged for the underlying controller. BUG=515492 Review URL: https://codereview.chromium.org/1279603002 Cr-Commit-Position: refs/heads/master@{#342639}
-rw-r--r--chrome/browser/devtools/BUILD.gn2
-rw-r--r--chrome/browser/devtools/devtools_network_controller.cc27
-rw-r--r--chrome/browser/devtools/devtools_network_controller.h30
-rw-r--r--chrome/browser/devtools/devtools_network_controller_handle.cc52
-rw-r--r--chrome/browser/devtools/devtools_network_controller_handle.h41
-rw-r--r--chrome/browser/devtools/devtools_network_controller_unittest.cc2
-rw-r--r--chrome/browser/devtools/devtools_network_protocol_handler.cc4
-rw-r--r--chrome/browser/profiles/off_the_record_profile_impl.cc6
-rw-r--r--chrome/browser/profiles/off_the_record_profile_impl.h3
-rw-r--r--chrome/browser/profiles/off_the_record_profile_io_data.cc6
-rw-r--r--chrome/browser/profiles/off_the_record_profile_io_data.h4
-rw-r--r--chrome/browser/profiles/profile.h7
-rw-r--r--chrome/browser/profiles/profile_impl.cc5
-rw-r--r--chrome/browser/profiles/profile_impl.h3
-rw-r--r--chrome/browser/profiles/profile_impl_io_data.cc6
-rw-r--r--chrome/browser/profiles/profile_impl_io_data.h4
-rw-r--r--chrome/browser/profiles/profile_io_data.cc7
-rw-r--r--chrome/browser/profiles/profile_io_data.h8
-rw-r--r--chrome/browser/ui/app_list/test/fake_profile.cc3
-rw-r--r--chrome/browser/ui/app_list/test/fake_profile.h3
-rw-r--r--chrome/chrome_debugger.gypi2
-rw-r--r--chrome/test/base/testing_profile.cc3
-rw-r--r--chrome/test/base/testing_profile.h3
23 files changed, 151 insertions, 80 deletions
diff --git a/chrome/browser/devtools/BUILD.gn b/chrome/browser/devtools/BUILD.gn
index 976801b..c87984a 100644
--- a/chrome/browser/devtools/BUILD.gn
+++ b/chrome/browser/devtools/BUILD.gn
@@ -36,6 +36,8 @@ static_library("devtools") {
"devtools_network_conditions.h",
"devtools_network_controller.cc",
"devtools_network_controller.h",
+ "devtools_network_controller_handle.cc",
+ "devtools_network_controller_handle.h",
"devtools_network_interceptor.cc",
"devtools_network_interceptor.h",
"devtools_network_protocol_handler.cc",
diff --git a/chrome/browser/devtools/devtools_network_controller.cc b/chrome/browser/devtools/devtools_network_controller.cc
index ff785b55..43d09b6 100644
--- a/chrome/browser/devtools/devtools_network_controller.cc
+++ b/chrome/browser/devtools/devtools_network_controller.cc
@@ -7,18 +7,14 @@
#include "chrome/browser/devtools/devtools_network_conditions.h"
#include "chrome/browser/devtools/devtools_network_interceptor.h"
#include "chrome/browser/devtools/devtools_network_transaction.h"
-#include "content/public/browser/browser_thread.h"
#include "net/http/http_request_info.h"
-using content::BrowserThread;
-
DevToolsNetworkController::DevToolsNetworkController()
: default_interceptor_(new DevToolsNetworkInterceptor()),
- appcache_interceptor_(new DevToolsNetworkInterceptor()),
- weak_ptr_factory_(this) {
-}
+ appcache_interceptor_(new DevToolsNetworkInterceptor()) {}
DevToolsNetworkController::~DevToolsNetworkController() {
+ DCHECK(thread_checker_.CalledOnValidThread());
}
base::WeakPtr<DevToolsNetworkInterceptor>
@@ -47,20 +43,6 @@ DevToolsNetworkController::GetInterceptor(
void DevToolsNetworkController::SetNetworkState(
const std::string& client_id,
scoped_ptr<DevToolsNetworkConditions> conditions) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
- BrowserThread::PostTask(
- content::BrowserThread::IO,
- FROM_HERE,
- base::Bind(
- &DevToolsNetworkController::SetNetworkStateOnIO,
- weak_ptr_factory_.GetWeakPtr(),
- client_id,
- base::Passed(&conditions)));
-}
-
-void DevToolsNetworkController::SetNetworkStateOnIO(
- const std::string& client_id,
- scoped_ptr<DevToolsNetworkConditions> conditions) {
DCHECK(thread_checker_.CalledOnValidThread());
DevToolsNetworkInterceptor* interceptor = interceptors_.get(client_id);
@@ -68,7 +50,8 @@ void DevToolsNetworkController::SetNetworkStateOnIO(
DCHECK(conditions);
if (!conditions)
return;
- Interceptor new_interceptor = Interceptor(new DevToolsNetworkInterceptor());
+ scoped_ptr<DevToolsNetworkInterceptor> new_interceptor(
+ new DevToolsNetworkInterceptor());
new_interceptor->UpdateConditions(conditions.Pass());
interceptors_.set(client_id, new_interceptor.Pass());
} else {
@@ -83,7 +66,7 @@ void DevToolsNetworkController::SetNetworkStateOnIO(
}
bool has_offline_interceptors = false;
- Interceptors::iterator it = interceptors_.begin();
+ InterceptorMap::iterator it = interceptors_.begin();
for (; it != interceptors_.end(); ++it) {
if (it->second->conditions()->offline()) {
has_offline_interceptors = true;
diff --git a/chrome/browser/devtools/devtools_network_controller.h b/chrome/browser/devtools/devtools_network_controller.h
index dddcac9..2fe0880 100644
--- a/chrome/browser/devtools/devtools_network_controller.h
+++ b/chrome/browser/devtools/devtools_network_controller.h
@@ -17,13 +17,8 @@ class DevToolsNetworkConditions;
class DevToolsNetworkInterceptor;
class DevToolsNetworkTransaction;
-namespace test {
-class DevToolsNetworkControllerHelper;
-}
-
// DevToolsNetworkController tracks DevToolsNetworkTransactions.
class DevToolsNetworkController {
-
public:
DevToolsNetworkController();
virtual ~DevToolsNetworkController();
@@ -36,26 +31,15 @@ class DevToolsNetworkController {
base::WeakPtr<DevToolsNetworkInterceptor> GetInterceptor(
DevToolsNetworkTransaction* transaction);
- protected:
- friend class test::DevToolsNetworkControllerHelper;
-
private:
- // Controller must be constructed on IO thread.
- base::ThreadChecker thread_checker_;
+ using InterceptorMap =
+ base::ScopedPtrHashMap<std::string,
+ scoped_ptr<DevToolsNetworkInterceptor>>;
- void SetNetworkStateOnIO(
- const std::string& client_id,
- scoped_ptr<DevToolsNetworkConditions> conditions);
-
- typedef scoped_ptr<DevToolsNetworkInterceptor> Interceptor;
- Interceptor default_interceptor_;
- Interceptor appcache_interceptor_;
- typedef base::ScopedPtrHashMap<std::string,
- scoped_ptr<DevToolsNetworkInterceptor>>
- Interceptors;
- Interceptors interceptors_;
-
- base::WeakPtrFactory<DevToolsNetworkController> weak_ptr_factory_;
+ scoped_ptr<DevToolsNetworkInterceptor> default_interceptor_;
+ scoped_ptr<DevToolsNetworkInterceptor> appcache_interceptor_;
+ InterceptorMap interceptors_;
+ base::ThreadChecker thread_checker_;
DISALLOW_COPY_AND_ASSIGN(DevToolsNetworkController);
};
diff --git a/chrome/browser/devtools/devtools_network_controller_handle.cc b/chrome/browser/devtools/devtools_network_controller_handle.cc
new file mode 100644
index 0000000..0cd1349
--- /dev/null
+++ b/chrome/browser/devtools/devtools_network_controller_handle.cc
@@ -0,0 +1,52 @@
+// Copyright 2015 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 "chrome/browser/devtools/devtools_network_controller_handle.h"
+
+#include "base/bind.h"
+#include "chrome/browser/devtools/devtools_network_conditions.h"
+#include "chrome/browser/devtools/devtools_network_controller.h"
+#include "content/public/browser/browser_thread.h"
+
+using content::BrowserThread;
+
+DevToolsNetworkControllerHandle::DevToolsNetworkControllerHandle() {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+}
+
+DevToolsNetworkControllerHandle::~DevToolsNetworkControllerHandle() {}
+
+void DevToolsNetworkControllerHandle::SetNetworkState(
+ const std::string& client_id,
+ scoped_ptr<DevToolsNetworkConditions> conditions) {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+
+ BrowserThread::PostTask(
+ BrowserThread::IO, FROM_HERE,
+ base::Bind(&DevToolsNetworkControllerHandle::SetNetworkStateOnIO,
+ base::Unretained(this), client_id, base::Passed(&conditions)));
+}
+
+DevToolsNetworkController* DevToolsNetworkControllerHandle::GetController() {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+
+ LazyInitialize();
+ return controller_.get();
+}
+
+void DevToolsNetworkControllerHandle::LazyInitialize() {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+
+ if (!controller_)
+ controller_.reset(new DevToolsNetworkController);
+}
+
+void DevToolsNetworkControllerHandle::SetNetworkStateOnIO(
+ const std::string& client_id,
+ scoped_ptr<DevToolsNetworkConditions> conditions) {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+
+ LazyInitialize();
+ controller_->SetNetworkState(client_id, conditions.Pass());
+}
diff --git a/chrome/browser/devtools/devtools_network_controller_handle.h b/chrome/browser/devtools/devtools_network_controller_handle.h
new file mode 100644
index 0000000..7aee0ff
--- /dev/null
+++ b/chrome/browser/devtools/devtools_network_controller_handle.h
@@ -0,0 +1,41 @@
+// Copyright 2015 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 CHROME_BROWSER_DEVTOOLS_DEVTOOLS_NETWORK_CONTROLLER_HANDLE_H_
+#define CHROME_BROWSER_DEVTOOLS_DEVTOOLS_NETWORK_CONTROLLER_HANDLE_H_
+
+#include <string>
+
+#include "base/macros.h"
+#include "base/memory/scoped_ptr.h"
+
+class DevToolsNetworkConditions;
+class DevToolsNetworkController;
+
+// A handle to manage an IO-thread DevToolsNetworkController on the IO thread
+// while allowing SetNetworkState to be called from the UI thread. Must be
+// created on the UI thread and destroyed on the IO thread.
+class DevToolsNetworkControllerHandle {
+ public:
+ DevToolsNetworkControllerHandle();
+ ~DevToolsNetworkControllerHandle();
+
+ // Called on the UI thread.
+ void SetNetworkState(const std::string& client_id,
+ scoped_ptr<DevToolsNetworkConditions> conditions);
+
+ // Called on the IO thread.
+ DevToolsNetworkController* GetController();
+
+ private:
+ void LazyInitialize();
+ void SetNetworkStateOnIO(const std::string& client_id,
+ scoped_ptr<DevToolsNetworkConditions> conditions);
+
+ scoped_ptr<DevToolsNetworkController> controller_;
+
+ DISALLOW_COPY_AND_ASSIGN(DevToolsNetworkControllerHandle);
+};
+
+#endif // CHROME_BROWSER_DEVTOOLS_DEVTOOLS_NETWORK_CONTROLLER_HANDLE_H_
diff --git a/chrome/browser/devtools/devtools_network_controller_unittest.cc b/chrome/browser/devtools/devtools_network_controller_unittest.cc
index de428fc..6893b3e 100644
--- a/chrome/browser/devtools/devtools_network_controller_unittest.cc
+++ b/chrome/browser/devtools/devtools_network_controller_unittest.cc
@@ -71,7 +71,7 @@ class DevToolsNetworkControllerHelper {
void SetNetworkState(const std::string id, bool offline) {
scoped_ptr<DevToolsNetworkConditions> conditions(
new DevToolsNetworkConditions(offline));
- controller_.SetNetworkStateOnIO(id, conditions.Pass());
+ controller_.SetNetworkState(id, conditions.Pass());
}
int Start() {
diff --git a/chrome/browser/devtools/devtools_network_protocol_handler.cc b/chrome/browser/devtools/devtools_network_protocol_handler.cc
index 1e93065..1c18152 100644
--- a/chrome/browser/devtools/devtools_network_protocol_handler.cc
+++ b/chrome/browser/devtools/devtools_network_protocol_handler.cc
@@ -6,7 +6,7 @@
#include "base/values.h"
#include "chrome/browser/devtools/devtools_network_conditions.h"
-#include "chrome/browser/devtools/devtools_network_controller.h"
+#include "chrome/browser/devtools/devtools_network_controller_handle.h"
#include "chrome/browser/devtools/devtools_protocol_constants.h"
#include "chrome/browser/profiles/profile.h"
#include "content/public/browser/devtools_agent_host.h"
@@ -100,7 +100,7 @@ void DevToolsNetworkProtocolHandler::UpdateNetworkState(
agent_host->GetBrowserContext());
if (!profile)
return;
- profile->GetDevToolsNetworkController()->SetNetworkState(
+ profile->GetDevToolsNetworkControllerHandle()->SetNetworkState(
agent_host->GetId(), conditions.Pass());
}
diff --git a/chrome/browser/profiles/off_the_record_profile_impl.cc b/chrome/browser/profiles/off_the_record_profile_impl.cc
index 400005a..de1513c 100644
--- a/chrome/browser/profiles/off_the_record_profile_impl.cc
+++ b/chrome/browser/profiles/off_the_record_profile_impl.cc
@@ -497,9 +497,9 @@ chrome_browser_net::Predictor* OffTheRecordProfileImpl::GetNetworkPredictor() {
return NULL;
}
-DevToolsNetworkController*
-OffTheRecordProfileImpl::GetDevToolsNetworkController() {
- return io_data_->GetDevToolsNetworkController();
+DevToolsNetworkControllerHandle*
+OffTheRecordProfileImpl::GetDevToolsNetworkControllerHandle() {
+ return io_data_->GetDevToolsNetworkControllerHandle();
}
void OffTheRecordProfileImpl::ClearNetworkingHistorySince(
diff --git a/chrome/browser/profiles/off_the_record_profile_impl.h b/chrome/browser/profiles/off_the_record_profile_impl.h
index c257e0d..732b4df 100644
--- a/chrome/browser/profiles/off_the_record_profile_impl.h
+++ b/chrome/browser/profiles/off_the_record_profile_impl.h
@@ -78,7 +78,8 @@ class OffTheRecordProfileImpl : public Profile {
PrefProxyConfigTracker* GetProxyConfigTracker() override;
chrome_browser_net::Predictor* GetNetworkPredictor() override;
- DevToolsNetworkController* GetDevToolsNetworkController() override;
+ DevToolsNetworkControllerHandle* GetDevToolsNetworkControllerHandle()
+ override;
void ClearNetworkingHistorySince(base::Time time,
const base::Closure& completion) override;
GURL GetHomePage() override;
diff --git a/chrome/browser/profiles/off_the_record_profile_io_data.cc b/chrome/browser/profiles/off_the_record_profile_io_data.cc
index f6d1b0f..74ea40f 100644
--- a/chrome/browser/profiles/off_the_record_profile_io_data.cc
+++ b/chrome/browser/profiles/off_the_record_profile_io_data.cc
@@ -147,10 +147,10 @@ OffTheRecordProfileIOData::Handle::CreateIsolatedAppRequestContextGetter(
return context;
}
-DevToolsNetworkController*
-OffTheRecordProfileIOData::Handle::GetDevToolsNetworkController() const {
+DevToolsNetworkControllerHandle*
+OffTheRecordProfileIOData::Handle::GetDevToolsNetworkControllerHandle() const {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
- return io_data_->network_controller();
+ return io_data_->network_controller_handle();
}
void OffTheRecordProfileIOData::Handle::LazyInitialize() const {
diff --git a/chrome/browser/profiles/off_the_record_profile_io_data.h b/chrome/browser/profiles/off_the_record_profile_io_data.h
index f3b3733..f1cd12e 100644
--- a/chrome/browser/profiles/off_the_record_profile_io_data.h
+++ b/chrome/browser/profiles/off_the_record_profile_io_data.h
@@ -66,8 +66,8 @@ class OffTheRecordProfileIOData : public ProfileIOData {
content::URLRequestInterceptorScopedVector
request_interceptors) const;
- // Returns the DevToolsNetworkController attached to ProfileIOData.
- DevToolsNetworkController* GetDevToolsNetworkController() const;
+ // Returns the DevToolsNetworkControllerHandle attached to ProfileIOData.
+ DevToolsNetworkControllerHandle* GetDevToolsNetworkControllerHandle() const;
private:
typedef std::map<StoragePartitionDescriptor,
diff --git a/chrome/browser/profiles/profile.h b/chrome/browser/profiles/profile.h
index 292358f..243dd0b 100644
--- a/chrome/browser/profiles/profile.h
+++ b/chrome/browser/profiles/profile.h
@@ -17,7 +17,7 @@
#include "content/public/browser/content_browser_client.h"
class ChromeAppCacheService;
-class DevToolsNetworkController;
+class DevToolsNetworkControllerHandle;
class ExtensionSpecialStoragePolicy;
class HostContentSettingsMap;
class PrefProxyConfigTracker;
@@ -287,8 +287,9 @@ class Profile : public content::BrowserContext {
// Returns the Predictor object used for dns prefetch.
virtual chrome_browser_net::Predictor* GetNetworkPredictor() = 0;
- // Returns the DevToolsNetworkController for this profile.
- virtual DevToolsNetworkController* GetDevToolsNetworkController() = 0;
+ // Returns the DevToolsNetworkControllerHandle for this profile.
+ virtual DevToolsNetworkControllerHandle*
+ GetDevToolsNetworkControllerHandle() = 0;
// Deletes all network related data since |time|. It deletes transport
// security state since |time| and it also deletes HttpServerProperties data.
diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc
index b50d00d..a0f1c78 100644
--- a/chrome/browser/profiles/profile_impl.cc
+++ b/chrome/browser/profiles/profile_impl.cc
@@ -1185,8 +1185,9 @@ chrome_browser_net::Predictor* ProfileImpl::GetNetworkPredictor() {
return predictor_;
}
-DevToolsNetworkController* ProfileImpl::GetDevToolsNetworkController() {
- return io_data_.GetDevToolsNetworkController();
+DevToolsNetworkControllerHandle*
+ProfileImpl::GetDevToolsNetworkControllerHandle() {
+ return io_data_.GetDevToolsNetworkControllerHandle();
}
void ProfileImpl::ClearNetworkingHistorySince(
diff --git a/chrome/browser/profiles/profile_impl.h b/chrome/browser/profiles/profile_impl.h
index 49d32ac..8390445 100644
--- a/chrome/browser/profiles/profile_impl.h
+++ b/chrome/browser/profiles/profile_impl.h
@@ -125,7 +125,8 @@ class ProfileImpl : public Profile {
base::FilePath last_selected_directory() override;
void set_last_selected_directory(const base::FilePath& path) override;
chrome_browser_net::Predictor* GetNetworkPredictor() override;
- DevToolsNetworkController* GetDevToolsNetworkController() override;
+ DevToolsNetworkControllerHandle* GetDevToolsNetworkControllerHandle()
+ override;
void ClearNetworkingHistorySince(base::Time time,
const base::Closure& completion) override;
GURL GetHomePage() override;
diff --git a/chrome/browser/profiles/profile_impl_io_data.cc b/chrome/browser/profiles/profile_impl_io_data.cc
index b633bb2..1974d93 100644
--- a/chrome/browser/profiles/profile_impl_io_data.cc
+++ b/chrome/browser/profiles/profile_impl_io_data.cc
@@ -345,10 +345,10 @@ ProfileImplIOData::Handle::GetIsolatedMediaRequestContextGetter(
return context;
}
-DevToolsNetworkController*
-ProfileImplIOData::Handle::GetDevToolsNetworkController() const {
+DevToolsNetworkControllerHandle*
+ProfileImplIOData::Handle::GetDevToolsNetworkControllerHandle() const {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
- return io_data_->network_controller();
+ return io_data_->network_controller_handle();
}
void ProfileImplIOData::Handle::ClearNetworkingHistorySince(
diff --git a/chrome/browser/profiles/profile_impl_io_data.h b/chrome/browser/profiles/profile_impl_io_data.h
index 1eca955..214ec74 100644
--- a/chrome/browser/profiles/profile_impl_io_data.h
+++ b/chrome/browser/profiles/profile_impl_io_data.h
@@ -98,8 +98,8 @@ class ProfileImplIOData : public ProfileIOData {
const base::FilePath& partition_path,
bool in_memory) const;
- // Returns the DevToolsNetworkController attached to ProfileIOData.
- DevToolsNetworkController* GetDevToolsNetworkController() const;
+ // Returns the DevToolsNetworkControllerHandle attached to ProfileIOData.
+ DevToolsNetworkControllerHandle* GetDevToolsNetworkControllerHandle() const;
// Deletes all network related data since |time|. It deletes transport
// security state since |time| and also deletes HttpServerProperties data.
diff --git a/chrome/browser/profiles/profile_io_data.cc b/chrome/browser/profiles/profile_io_data.cc
index bf7e2a9..614c0cb 100644
--- a/chrome/browser/profiles/profile_io_data.cc
+++ b/chrome/browser/profiles/profile_io_data.cc
@@ -1314,11 +1314,10 @@ scoped_ptr<net::HttpCache> ProfileIOData::CreateMainHttpFactory(
if (data_reduction_proxy_io_data_.get())
params.proxy_delegate = data_reduction_proxy_io_data_->proxy_delegate();
- network_controller_.reset(new DevToolsNetworkController());
-
net::HttpNetworkSession* session = new net::HttpNetworkSession(params);
return scoped_ptr<net::HttpCache>(new net::HttpCache(
- new DevToolsNetworkTransactionFactory(network_controller_.get(), session),
+ new DevToolsNetworkTransactionFactory(
+ network_controller_handle_.GetController(), session),
context->net_log(), main_backend));
}
@@ -1327,7 +1326,7 @@ scoped_ptr<net::HttpCache> ProfileIOData::CreateHttpFactory(
net::HttpCache::BackendFactory* backend) const {
return scoped_ptr<net::HttpCache>(new net::HttpCache(
new DevToolsNetworkTransactionFactory(
- network_controller_.get(), shared_session),
+ network_controller_handle_.GetController(), shared_session),
shared_session->net_log(), backend));
}
diff --git a/chrome/browser/profiles/profile_io_data.h b/chrome/browser/profiles/profile_io_data.h
index a3a55b1..7233c40 100644
--- a/chrome/browser/profiles/profile_io_data.h
+++ b/chrome/browser/profiles/profile_io_data.h
@@ -18,6 +18,7 @@
#include "base/prefs/pref_member.h"
#include "base/synchronization/lock.h"
#include "chrome/browser/custom_handlers/protocol_handler_registry.h"
+#include "chrome/browser/devtools/devtools_network_controller_handle.h"
#include "chrome/browser/io_thread.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/storage_partition_descriptor.h"
@@ -34,7 +35,6 @@
class ChromeHttpUserAgentSettings;
class ChromeNetworkDelegate;
class ChromeURLRequestContextGetter;
-class DevToolsNetworkController;
class HostContentSettingsMap;
class MediaDeviceIDSalt;
class ProtocolHandlerRegistry;
@@ -174,8 +174,8 @@ class ProfileIOData {
content::ResourceContext::SaltCallback GetMediaDeviceIDSalt() const;
- DevToolsNetworkController* network_controller() const {
- return network_controller_.get();
+ DevToolsNetworkControllerHandle* network_controller_handle() const {
+ return &network_controller_handle_;
}
net::TransportSecurityState* transport_security_state() const {
@@ -594,7 +594,7 @@ class ProfileIOData {
extension_throttle_manager_;
#endif
- mutable scoped_ptr<DevToolsNetworkController> network_controller_;
+ mutable DevToolsNetworkControllerHandle network_controller_handle_;
// TODO(jhawkins): Remove once crbug.com/102004 is fixed.
bool initialized_on_UI_thread_;
diff --git a/chrome/browser/ui/app_list/test/fake_profile.cc b/chrome/browser/ui/app_list/test/fake_profile.cc
index 9a91fd5..55621f5f 100644
--- a/chrome/browser/ui/app_list/test/fake_profile.cc
+++ b/chrome/browser/ui/app_list/test/fake_profile.cc
@@ -191,7 +191,8 @@ chrome_browser_net::Predictor* FakeProfile::GetNetworkPredictor() {
return nullptr;
}
-DevToolsNetworkController* FakeProfile::GetDevToolsNetworkController() {
+DevToolsNetworkControllerHandle*
+FakeProfile::GetDevToolsNetworkControllerHandle() {
return nullptr;
}
diff --git a/chrome/browser/ui/app_list/test/fake_profile.h b/chrome/browser/ui/app_list/test/fake_profile.h
index b294544..74dbaf4 100644
--- a/chrome/browser/ui/app_list/test/fake_profile.h
+++ b/chrome/browser/ui/app_list/test/fake_profile.h
@@ -90,7 +90,8 @@ class FakeProfile : public Profile {
PrefProxyConfigTracker* GetProxyConfigTracker() override;
chrome_browser_net::Predictor* GetNetworkPredictor() override;
- DevToolsNetworkController* GetDevToolsNetworkController() override;
+ DevToolsNetworkControllerHandle* GetDevToolsNetworkControllerHandle()
+ override;
void ClearNetworkingHistorySince(base::Time time,
const base::Closure& completion) override;
GURL GetHomePage() override;
diff --git a/chrome/chrome_debugger.gypi b/chrome/chrome_debugger.gypi
index 7beba91..48e1ea3 100644
--- a/chrome/chrome_debugger.gypi
+++ b/chrome/chrome_debugger.gypi
@@ -29,6 +29,8 @@
'browser/devtools/devtools_network_conditions.h',
'browser/devtools/devtools_network_controller.cc',
'browser/devtools/devtools_network_controller.h',
+ 'browser/devtools/devtools_network_controller_handle.cc',
+ 'browser/devtools/devtools_network_controller_handle.h',
'browser/devtools/devtools_network_interceptor.cc',
'browser/devtools/devtools_network_interceptor.h',
'browser/devtools/devtools_network_protocol_handler.cc',
diff --git a/chrome/test/base/testing_profile.cc b/chrome/test/base/testing_profile.cc
index efdf3c6..dba1e98 100644
--- a/chrome/test/base/testing_profile.cc
+++ b/chrome/test/base/testing_profile.cc
@@ -928,7 +928,8 @@ chrome_browser_net::Predictor* TestingProfile::GetNetworkPredictor() {
return NULL;
}
-DevToolsNetworkController* TestingProfile::GetDevToolsNetworkController() {
+DevToolsNetworkControllerHandle*
+TestingProfile::GetDevToolsNetworkControllerHandle() {
return NULL;
}
diff --git a/chrome/test/base/testing_profile.h b/chrome/test/base/testing_profile.h
index 2b00728..efac4a2 100644
--- a/chrome/test/base/testing_profile.h
+++ b/chrome/test/base/testing_profile.h
@@ -308,7 +308,8 @@ class TestingProfile : public Profile {
void BlockUntilHistoryProcessesPendingRequests();
chrome_browser_net::Predictor* GetNetworkPredictor() override;
- DevToolsNetworkController* GetDevToolsNetworkController() override;
+ DevToolsNetworkControllerHandle* GetDevToolsNetworkControllerHandle()
+ override;
void ClearNetworkingHistorySince(base::Time time,
const base::Closure& completion) override;
GURL GetHomePage() override;