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

Unified Diff: chrome/browser/ui/search/search_tab_helper.cc

Issue 73013002: [Clean up] Replace SearchTabHelper NAV_ENTRY_COMMITTED notification observer with WebContentsObserve (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix android compile error Created 7 years, 1 month 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
« no previous file with comments | « chrome/browser/ui/search/search_tab_helper.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/search/search_tab_helper.cc
diff --git a/chrome/browser/ui/search/search_tab_helper.cc b/chrome/browser/ui/search/search_tab_helper.cc
index f9dc05ab7aa66c532cda80c252c5574a2a9a96fd..45335aa459b4e457b9ec0efbb4427de805e43847 100644
--- a/chrome/browser/ui/search/search_tab_helper.cc
+++ b/chrome/browser/ui/search/search_tab_helper.cc
@@ -37,8 +37,6 @@
#include "content/public/browser/navigation_details.h"
#include "content/public/browser/navigation_entry.h"
#include "content/public/browser/navigation_type.h"
-#include "content/public/browser/notification_service.h"
-#include "content/public/browser/notification_types.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/user_metrics.h"
#include "content/public/browser/web_contents.h"
@@ -139,15 +137,6 @@ SearchTabHelper::SearchTabHelper(content::WebContents* web_contents)
if (!is_search_enabled_)
return;
- // Observe NOTIFICATION_NAV_ENTRY_COMMITTED events so we can reset state
- // associated with the WebContents (such as mode, last known most visited
- // items, instant support state etc).
- registrar_.Add(
- this,
- content::NOTIFICATION_NAV_ENTRY_COMMITTED,
- content::Source<content::NavigationController>(
- &web_contents->GetController()));
-
instant_service_ =
InstantServiceFactory::GetForProfile(
Profile::FromBrowserContext(web_contents_->GetBrowserContext()));
@@ -223,59 +212,6 @@ void SearchTabHelper::OnTabDeactivated() {
ipc_router_.OnTabDeactivated();
}
-void SearchTabHelper::Observe(
- int type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) {
- DCHECK_EQ(content::NOTIFICATION_NAV_ENTRY_COMMITTED, type);
- content::LoadCommittedDetails* load_details =
- content::Details<content::LoadCommittedDetails>(details).ptr();
- if (!load_details->is_main_frame)
- return;
-
- // TODO(kmadhusu): Set the page initial states (such as omnibox margin, etc)
- // from here. Please refer to crbug.com/247517 for more details.
- if (chrome::ShouldAssignURLToInstantRenderer(web_contents_->GetURL(),
- profile())) {
- ipc_router_.SetDisplayInstantResults();
- }
-
- UpdateMode(true, false);
-
- content::NavigationEntry* entry =
- web_contents_->GetController().GetVisibleEntry();
- DCHECK(entry);
-
- // Already determined the instant support state for this page, do not reset
- // the instant support state.
- //
- // When we get a navigation entry committed event, there seem to be two ways
- // to tell whether the navigation was "in-page". Ideally, when
- // LoadCommittedDetails::is_in_page is true, we should have
- // LoadCommittedDetails::type to be NAVIGATION_TYPE_IN_PAGE. Unfortunately,
- // they are different in some cases. To workaround this bug, we are checking
- // (is_in_page || type == NAVIGATION_TYPE_IN_PAGE). Please refer to
- // crbug.com/251330 for more details.
- if (load_details->is_in_page ||
- load_details->type == content::NAVIGATION_TYPE_IN_PAGE) {
- // When an "in-page" navigation happens, we will not receive a
- // DidFinishLoad() event. Therefore, we will not determine the Instant
- // support for the navigated page. So, copy over the Instant support from
- // the previous entry. If the page does not support Instant, update the
- // location bar from here to turn off search terms replacement.
- chrome::SetInstantSupportStateInNavigationEntry(model_.instant_support(),
- entry);
- if (model_.instant_support() == INSTANT_SUPPORT_NO)
- UpdateLocationBar(web_contents_);
- return;
- }
-
- model_.SetInstantSupportState(INSTANT_SUPPORT_UNKNOWN);
- model_.SetVoiceSearchSupported(false);
- chrome::SetInstantSupportStateInNavigationEntry(model_.instant_support(),
- entry);
-}
-
void SearchTabHelper::RenderViewCreated(
content::RenderViewHost* render_view_host) {
ipc_router_.SetPromoInformation(IsAppLauncherEnabled());
@@ -335,6 +271,57 @@ void SearchTabHelper::DidFinishLoad(
DetermineIfPageSupportsInstant();
}
+void SearchTabHelper::NavigationEntryCommitted(
+ const content::LoadCommittedDetails& load_details) {
+ if (!is_search_enabled_)
+ return;
+
+ if (!load_details.is_main_frame)
+ return;
+
+ // TODO(kmadhusu): Set the page initial states (such as omnibox margin, etc)
+ // from here. Please refer to crbug.com/247517 for more details.
+ if (chrome::ShouldAssignURLToInstantRenderer(web_contents_->GetURL(),
+ profile())) {
+ ipc_router_.SetDisplayInstantResults();
+ }
+
+ UpdateMode(true, false);
+
+ content::NavigationEntry* entry =
+ web_contents_->GetController().GetVisibleEntry();
+ DCHECK(entry);
+
+ // Already determined the instant support state for this page, do not reset
+ // the instant support state.
+ //
+ // When we get a navigation entry committed event, there seem to be two ways
+ // to tell whether the navigation was "in-page". Ideally, when
+ // LoadCommittedDetails::is_in_page is true, we should have
+ // LoadCommittedDetails::type to be NAVIGATION_TYPE_IN_PAGE. Unfortunately,
+ // they are different in some cases. To workaround this bug, we are checking
+ // (is_in_page || type == NAVIGATION_TYPE_IN_PAGE). Please refer to
+ // crbug.com/251330 for more details.
+ if (load_details.is_in_page ||
+ load_details.type == content::NAVIGATION_TYPE_IN_PAGE) {
+ // When an "in-page" navigation happens, we will not receive a
+ // DidFinishLoad() event. Therefore, we will not determine the Instant
+ // support for the navigated page. So, copy over the Instant support from
+ // the previous entry. If the page does not support Instant, update the
+ // location bar from here to turn off search terms replacement.
+ chrome::SetInstantSupportStateInNavigationEntry(model_.instant_support(),
+ entry);
+ if (model_.instant_support() == INSTANT_SUPPORT_NO)
+ UpdateLocationBar(web_contents_);
+ return;
+ }
+
+ model_.SetInstantSupportState(INSTANT_SUPPORT_UNKNOWN);
+ model_.SetVoiceSearchSupported(false);
+ chrome::SetInstantSupportStateInNavigationEntry(model_.instant_support(),
+ entry);
+}
+
void SearchTabHelper::OnInstantSupportDetermined(bool supports_instant) {
InstantSupportChanged(supports_instant);
}
« no previous file with comments | « chrome/browser/ui/search/search_tab_helper.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698