summaryrefslogtreecommitdiffstats
path: root/extensions/browser
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/browser')
-rw-r--r--extensions/browser/api/declarative/rules_registry_service.cc7
-rw-r--r--extensions/browser/api/declarative/rules_registry_service.h8
-rw-r--r--extensions/browser/browser_context_keyed_api_factory.h5
-rw-r--r--extensions/browser/guest_view/web_view/web_view_guest.cc25
-rw-r--r--extensions/browser/guest_view/web_view/web_view_guest.h4
5 files changed, 31 insertions, 18 deletions
diff --git a/extensions/browser/api/declarative/rules_registry_service.cc b/extensions/browser/api/declarative/rules_registry_service.cc
index 939b01e..bca6fd5 100644
--- a/extensions/browser/api/declarative/rules_registry_service.cc
+++ b/extensions/browser/api/declarative/rules_registry_service.cc
@@ -137,6 +137,13 @@ RulesRegistryService* RulesRegistryService::Get(
return BrowserContextKeyedAPIFactory<RulesRegistryService>::Get(context);
}
+// static
+RulesRegistryService* RulesRegistryService::GetIfExists(
+ content::BrowserContext* context) {
+ return BrowserContextKeyedAPIFactory<RulesRegistryService>::GetIfExists(
+ context);
+}
+
void RulesRegistryService::RegisterRulesRegistry(
scoped_refptr<RulesRegistry> rule_registry) {
const std::string event_name(rule_registry->event_name());
diff --git a/extensions/browser/api/declarative/rules_registry_service.h b/extensions/browser/api/declarative/rules_registry_service.h
index f03adba..8f16cb2 100644
--- a/extensions/browser/api/declarative/rules_registry_service.h
+++ b/extensions/browser/api/declarative/rules_registry_service.h
@@ -61,9 +61,15 @@ class RulesRegistryService : public BrowserContextKeyedAPI,
static BrowserContextKeyedAPIFactory<RulesRegistryService>*
GetFactoryInstance();
- // Convenience method to get the RulesRegistryService for a context.
+ // Convenience method to get the RulesRegistryService for a context. If a
+ // RulesRegistryService does not already exist for |context|, one will be
+ // created and returned.
static RulesRegistryService* Get(content::BrowserContext* context);
+ // The same as Get(), except that if a RulesRegistryService does not already
+ // exist for |context|, nullptr is returned.
+ static RulesRegistryService* GetIfExists(content::BrowserContext* context);
+
int GetNextRulesRegistryID();
// Registers the default RulesRegistries used in Chromium.
diff --git a/extensions/browser/browser_context_keyed_api_factory.h b/extensions/browser/browser_context_keyed_api_factory.h
index fc0add2..ad87e22 100644
--- a/extensions/browser/browser_context_keyed_api_factory.h
+++ b/extensions/browser/browser_context_keyed_api_factory.h
@@ -76,6 +76,11 @@ class BrowserContextKeyedAPIFactory : public BrowserContextKeyedServiceFactory {
T::GetFactoryInstance()->GetServiceForBrowserContext(context, true));
}
+ static T* GetIfExists(content::BrowserContext* context) {
+ return static_cast<T*>(
+ T::GetFactoryInstance()->GetServiceForBrowserContext(context, false));
+ }
+
// Declare dependencies on other factories.
// By default, ExtensionSystemFactory is the only dependency; however,
// specializations can override this. Declare your specialization in
diff --git a/extensions/browser/guest_view/web_view/web_view_guest.cc b/extensions/browser/guest_view/web_view/web_view_guest.cc
index 63d2275..4ab87e2 100644
--- a/extensions/browser/guest_view/web_view/web_view_guest.cc
+++ b/extensions/browser/guest_view/web_view/web_view_guest.cc
@@ -198,20 +198,11 @@ static base::LazyInstance<WebViewKeyToIDMap> web_view_key_to_id_map =
} // namespace
// static
-void WebViewGuest::CleanUp(int embedder_process_id, int view_instance_id) {
- GuestViewBase::CleanUp(embedder_process_id, view_instance_id);
-
- auto rph = content::RenderProcessHost::FromID(embedder_process_id);
- // TODO(paulmeyer): It should be impossible for rph to be nullptr here, but
- // this check is needed here for now as there seems to be occasional crashes
- // because of this (http//crbug.com/499438). This should be removed once the
- // cause is discovered and fixed.
- DCHECK(rph != nullptr)
- << "Cannot find RenderProcessHost for embedder process ID# "
- << embedder_process_id;
- if (rph == nullptr)
- return;
- auto browser_context = rph->GetBrowserContext();
+void WebViewGuest::CleanUp(content::BrowserContext* browser_context,
+ int embedder_process_id,
+ int view_instance_id) {
+ GuestViewBase::CleanUp(browser_context, embedder_process_id,
+ view_instance_id);
// Clean up rules registries for the WebView.
WebViewKey key(embedder_process_id, view_instance_id);
@@ -219,8 +210,10 @@ void WebViewGuest::CleanUp(int embedder_process_id, int view_instance_id) {
if (it != web_view_key_to_id_map.Get().end()) {
auto rules_registry_id = it->second;
web_view_key_to_id_map.Get().erase(it);
- RulesRegistryService::Get(browser_context)
- ->RemoveRulesRegistriesByID(rules_registry_id);
+ RulesRegistryService* rrs =
+ RulesRegistryService::GetIfExists(browser_context);
+ if (rrs)
+ rrs->RemoveRulesRegistriesByID(rules_registry_id);
}
// Clean up web request event listeners for the WebView.
diff --git a/extensions/browser/guest_view/web_view/web_view_guest.h b/extensions/browser/guest_view/web_view/web_view_guest.h
index 3014f92..d19ddf8 100644
--- a/extensions/browser/guest_view/web_view/web_view_guest.h
+++ b/extensions/browser/guest_view/web_view/web_view_guest.h
@@ -42,7 +42,9 @@ class WebViewGuest : public guest_view::GuestView<WebViewGuest>,
public:
// Clean up state when this GuestView is being destroyed. See
// GuestViewBase::CleanUp().
- static void CleanUp(int embedder_process_id, int view_instance_id);
+ static void CleanUp(content::BrowserContext* browser_context,
+ int embedder_process_id,
+ int view_instance_id);
static GuestViewBase* Create(content::WebContents* owner_web_contents);