| Index: extensions/browser/extension_host.cc
|
| diff --git a/extensions/browser/extension_host.cc b/extensions/browser/extension_host.cc
|
| index df9248912921d0c31a5ec790b4cf799e5f92d465..bbf51ef4913b41b8d784b07c8eae28e7ed6eebad 100644
|
| --- a/extensions/browser/extension_host.cc
|
| +++ b/extensions/browser/extension_host.cc
|
| @@ -58,7 +58,7 @@
|
| extension_id_(extension->id()),
|
| browser_context_(site_instance->GetBrowserContext()),
|
| render_view_host_(nullptr),
|
| - has_loaded_once_(false),
|
| + did_stop_loading_(false),
|
| document_element_available_(false),
|
| initial_url_(url),
|
| extension_function_dispatcher_(browser_context_, this),
|
| @@ -92,7 +92,6 @@
|
| UMA_HISTOGRAM_LONG_TIMES("Extensions.EventPageActiveTime2",
|
| load_start_->Elapsed());
|
| }
|
| -
|
| content::NotificationService::current()->Notify(
|
| extensions::NOTIFICATION_EXTENSION_HOST_DESTROYED,
|
| content::Source<BrowserContext>(browser_context_),
|
| @@ -102,16 +101,11 @@
|
| FOR_EACH_OBSERVER(DeferredStartRenderHostObserver,
|
| deferred_start_render_host_observer_list_,
|
| OnDeferredStartRenderHostDestroyed(this));
|
| -
|
| - // Remove ourselves from the queue as late as possible (before effectively
|
| - // destroying self, but after everything else) so that queues that are
|
| - // monitoring lifetime get a chance to see stop-loading events.
|
| delegate_->GetExtensionHostQueue()->Remove(this);
|
| -
|
| - // Deliberately stop observing |host_contents_| because its destruction
|
| - // events (like DidStopLoading, it turns out) can call back into
|
| - // ExtensionHost re-entrantly, when anything declared after |host_contents_|
|
| - // has already been destroyed.
|
| + // Immediately stop observing |host_contents_| because its destruction events
|
| + // (like DidStopLoading, it turns out) can call back into ExtensionHost
|
| + // re-entrantly, when anything declared after |host_contents_| has already
|
| + // been destroyed.
|
| content::WebContentsObserver::Observe(nullptr);
|
| }
|
|
|
| @@ -225,7 +219,7 @@
|
| }
|
|
|
| bool ExtensionHost::IsBackgroundPage() const {
|
| - DCHECK_EQ(extension_host_type_, VIEW_TYPE_EXTENSION_BACKGROUND_PAGE);
|
| + DCHECK(extension_host_type_ == VIEW_TYPE_EXTENSION_BACKGROUND_PAGE);
|
| return true;
|
| }
|
|
|
| @@ -274,23 +268,35 @@
|
| }
|
|
|
| void ExtensionHost::DidStopLoading(content::RenderViewHost* render_view_host) {
|
| - // Only record UMA for the first load. Subsequent loads will likely behave
|
| - // quite different, and it's first load we're most interested in.
|
| - if (!has_loaded_once_)
|
| - RecordStopLoadingUMA();
|
| - has_loaded_once_ = true;
|
| + bool notify = !did_stop_loading_;
|
| + did_stop_loading_ = true;
|
| OnDidStopLoading();
|
| - content::NotificationService::current()->Notify(
|
| - extensions::NOTIFICATION_EXTENSION_HOST_DID_STOP_LOADING,
|
| - content::Source<BrowserContext>(browser_context_),
|
| - content::Details<ExtensionHost>(this));
|
| - FOR_EACH_OBSERVER(DeferredStartRenderHostObserver,
|
| - deferred_start_render_host_observer_list_,
|
| - OnDeferredStartRenderHostDidStopLoading(this));
|
| + if (notify) {
|
| + CHECK(load_start_.get());
|
| + if (extension_host_type_ == VIEW_TYPE_EXTENSION_BACKGROUND_PAGE) {
|
| + if (extension_ && BackgroundInfo::HasLazyBackgroundPage(extension_)) {
|
| + UMA_HISTOGRAM_MEDIUM_TIMES("Extensions.EventPageLoadTime2",
|
| + load_start_->Elapsed());
|
| + } else {
|
| + UMA_HISTOGRAM_MEDIUM_TIMES("Extensions.BackgroundPageLoadTime2",
|
| + load_start_->Elapsed());
|
| + }
|
| + } else if (extension_host_type_ == VIEW_TYPE_EXTENSION_POPUP) {
|
| + UMA_HISTOGRAM_MEDIUM_TIMES("Extensions.PopupLoadTime2",
|
| + load_start_->Elapsed());
|
| + }
|
| + content::NotificationService::current()->Notify(
|
| + extensions::NOTIFICATION_EXTENSION_HOST_DID_STOP_LOADING,
|
| + content::Source<BrowserContext>(browser_context_),
|
| + content::Details<ExtensionHost>(this));
|
| + FOR_EACH_OBSERVER(DeferredStartRenderHostObserver,
|
| + deferred_start_render_host_observer_list_,
|
| + OnDeferredStartRenderHostDidStopLoading(this));
|
| + }
|
| }
|
|
|
| void ExtensionHost::OnDidStopLoading() {
|
| - DCHECK_EQ(extension_host_type_, VIEW_TYPE_EXTENSION_BACKGROUND_PAGE);
|
| + DCHECK(extension_host_type_ == VIEW_TYPE_EXTENSION_BACKGROUND_PAGE);
|
| // Nothing to do for background pages.
|
| }
|
|
|
| @@ -455,20 +461,4 @@
|
| return view_type == extensions::VIEW_TYPE_EXTENSION_BACKGROUND_PAGE;
|
| }
|
|
|
| -void ExtensionHost::RecordStopLoadingUMA() {
|
| - CHECK(load_start_.get());
|
| - if (extension_host_type_ == VIEW_TYPE_EXTENSION_BACKGROUND_PAGE) {
|
| - if (extension_ && BackgroundInfo::HasLazyBackgroundPage(extension_)) {
|
| - UMA_HISTOGRAM_MEDIUM_TIMES("Extensions.EventPageLoadTime2",
|
| - load_start_->Elapsed());
|
| - } else {
|
| - UMA_HISTOGRAM_MEDIUM_TIMES("Extensions.BackgroundPageLoadTime2",
|
| - load_start_->Elapsed());
|
| - }
|
| - } else if (extension_host_type_ == VIEW_TYPE_EXTENSION_POPUP) {
|
| - UMA_HISTOGRAM_MEDIUM_TIMES("Extensions.PopupLoadTime2",
|
| - load_start_->Elapsed());
|
| - }
|
| -}
|
| -
|
| } // namespace extensions
|
|
|