Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(106)

Unified Diff: ios/web/browser_state.cc

Issue 1110213002: Upstream most of the iOS WebUI support in ios/web/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ios/web/browser_state.cc
diff --git a/ios/web/browser_state.cc b/ios/web/browser_state.cc
index c7ce99fd31d4e5877211953300d8e164264d76ef..d7321aea9390be2261ef9eef6aff0cd4cb2de0cf 100644
--- a/ios/web/browser_state.cc
+++ b/ios/web/browser_state.cc
@@ -4,15 +4,18 @@
#include "ios/web/public/browser_state.h"
+#include "base/location.h"
#include "base/memory/ref_counted.h"
#include "ios/web/public/certificate_policy_cache.h"
#include "ios/web/public/web_thread.h"
+#include "ios/web/webui/url_data_manager_ios_backend.h"
namespace web {
namespace {
// Private key used for safe conversion of base::SupportsUserData to
// web::BrowserState in web::BrowserState::FromSupportsUserData.
const char kBrowserStateIdentifierKey[] = "BrowserStateIdentifierKey";
+
// Data key names.
const char kCertificatePolicyCacheKeyName[] = "cert_policy_cache";
@@ -44,7 +47,7 @@ scoped_refptr<CertificatePolicyCache> BrowserState::GetCertificatePolicyCache(
return handle->policy_cache;
}
-BrowserState::BrowserState() {
+BrowserState::BrowserState() : url_data_manager_ios_backend_(nullptr) {
// (Refcounted)?BrowserStateKeyedServiceFactories needs to be able to convert
// a base::SupportsUserData to a BrowserState. Moreover, since the factories
// may be passed a content::BrowserContext instead of a BrowserState, attach
@@ -53,6 +56,25 @@ BrowserState::BrowserState() {
}
BrowserState::~BrowserState() {
+ // Delete the URLDataManagerIOSBackend instance on the IO thread if it has
+ // been created. Note that while this check can theoretically race with a
+ // call to |GetURLDataManagerIOSBackendOnIOThread()|, if any clients of this
+ // BrowserState are still accessing it on the IO thread at this point,
+ // they're going to have a bad time anyway.
+ if (url_data_manager_ios_backend_) {
+ bool posted = web::WebThread::DeleteSoon(web::WebThread::IO, FROM_HERE,
+ url_data_manager_ios_backend_);
+ if (!posted)
+ delete url_data_manager_ios_backend_;
+ }
+}
+
+URLDataManagerIOSBackend*
+BrowserState::GetURLDataManagerIOSBackendOnIOThread() {
+ DCHECK_CURRENTLY_ON_WEB_THREAD(web::WebThread::IO);
+ if (!url_data_manager_ios_backend_)
+ url_data_manager_ios_backend_ = new URLDataManagerIOSBackend();
+ return url_data_manager_ios_backend_;
}
// static

Powered by Google App Engine
This is Rietveld 408576698