OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/ui/search/search_tab_helper.h" | 5 #include "chrome/browser/ui/search/search_tab_helper.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <set> | 8 #include <set> |
9 | 9 |
10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
67 // We can't use WebContents::GetURL() because that uses the active entry, | 67 // We can't use WebContents::GetURL() because that uses the active entry, |
68 // whereas we want the visible entry. | 68 // whereas we want the visible entry. |
69 const content::NavigationEntry* entry = | 69 const content::NavigationEntry* entry = |
70 contents->GetController().GetVisibleEntry(); | 70 contents->GetController().GetVisibleEntry(); |
71 if (entry && entry->GetVirtualURL() == chrome::kChromeUINewTabURL) | 71 if (entry && entry->GetVirtualURL() == chrome::kChromeUINewTabURL) |
72 return true; | 72 return true; |
73 | 73 |
74 return search::IsInstantNTP(contents); | 74 return search::IsInstantNTP(contents); |
75 } | 75 } |
76 | 76 |
77 bool IsLocal(const content::WebContents* contents) { | |
78 if (!contents) | |
79 return false; | |
80 const content::NavigationEntry* entry = | |
81 contents->GetController().GetVisibleEntry(); | |
82 return entry && entry->GetURL() == chrome::kChromeSearchLocalNtpUrl; | |
83 } | |
84 | |
85 // Returns true if |contents| are rendered inside an Instant process. | 77 // Returns true if |contents| are rendered inside an Instant process. |
86 bool InInstantProcess(Profile* profile, | 78 bool InInstantProcess(Profile* profile, |
87 const content::WebContents* contents) { | 79 const content::WebContents* contents) { |
88 if (!profile || !contents) | 80 if (!profile || !contents) |
89 return false; | 81 return false; |
90 | 82 |
91 InstantService* instant_service = | 83 InstantService* instant_service = |
92 InstantServiceFactory::GetForProfile(profile); | 84 InstantServiceFactory::GetForProfile(profile); |
93 return instant_service && | 85 return instant_service && |
94 instant_service->IsInstantProcess( | 86 instant_service->IsInstantProcess( |
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
292 entry, l10n_util::GetStringUTF16(IDS_NEW_TAB_TITLE)); | 284 entry, l10n_util::GetStringUTF16(IDS_NEW_TAB_TITLE)); |
293 } | 285 } |
294 } | 286 } |
295 | 287 |
296 void SearchTabHelper::DidFinishLoad(content::RenderFrameHost* render_frame_host, | 288 void SearchTabHelper::DidFinishLoad(content::RenderFrameHost* render_frame_host, |
297 const GURL& /* validated_url */) { | 289 const GURL& /* validated_url */) { |
298 if (!render_frame_host->GetParent()) { | 290 if (!render_frame_host->GetParent()) { |
299 if (search::IsInstantNTP(web_contents_)) | 291 if (search::IsInstantNTP(web_contents_)) |
300 RecordNewTabLoadTime(web_contents_); | 292 RecordNewTabLoadTime(web_contents_); |
301 | 293 |
302 DetermineIfPageSupportsInstant(); | 294 InstantSupportChanged(InInstantProcess(profile(), web_contents_)); |
303 } | 295 } |
304 } | 296 } |
305 | 297 |
306 void SearchTabHelper::NavigationEntryCommitted( | 298 void SearchTabHelper::NavigationEntryCommitted( |
307 const content::LoadCommittedDetails& load_details) { | 299 const content::LoadCommittedDetails& load_details) { |
308 if (!is_search_enabled_) | 300 if (!is_search_enabled_) |
309 return; | 301 return; |
310 | 302 |
311 if (!load_details.is_main_frame) | 303 if (!load_details.is_main_frame) |
312 return; | 304 return; |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
492 if (omnibox_view && omnibox_view->model()->user_input_in_progress()) | 484 if (omnibox_view && omnibox_view->model()->user_input_in_progress()) |
493 type = SearchMode::MODE_SEARCH_SUGGESTIONS; | 485 type = SearchMode::MODE_SEARCH_SUGGESTIONS; |
494 | 486 |
495 SearchMode old_mode(model_.mode()); | 487 SearchMode old_mode(model_.mode()); |
496 model_.SetMode(SearchMode(type, origin)); | 488 model_.SetMode(SearchMode(type, origin)); |
497 if (old_mode.is_ntp() != model_.mode().is_ntp()) { | 489 if (old_mode.is_ntp() != model_.mode().is_ntp()) { |
498 ipc_router_.SetInputInProgress(IsInputInProgress()); | 490 ipc_router_.SetInputInProgress(IsInputInProgress()); |
499 } | 491 } |
500 } | 492 } |
501 | 493 |
502 void SearchTabHelper::DetermineIfPageSupportsInstant() { | |
503 if (!InInstantProcess(profile(), web_contents_)) { | |
504 // The page is not in the Instant process. This page does not support | |
505 // instant. If we send an IPC message to a page that is not in the Instant | |
506 // process, it will never receive it and will never respond. Therefore, | |
507 // return immediately. | |
508 InstantSupportChanged(false); | |
509 } else if (IsLocal(web_contents_)) { | |
510 // Local pages always support Instant. | |
511 InstantSupportChanged(true); | |
512 } else { | |
513 ipc_router_.DetermineIfPageSupportsInstant(); | |
514 } | |
515 } | |
516 | |
517 const OmniboxView* SearchTabHelper::GetOmniboxView() const { | 494 const OmniboxView* SearchTabHelper::GetOmniboxView() const { |
518 #if defined(OS_ANDROID) | 495 #if defined(OS_ANDROID) |
519 return nullptr; | 496 return nullptr; |
520 #else | 497 #else |
521 Browser* browser = chrome::FindBrowserWithWebContents(web_contents_); | 498 Browser* browser = chrome::FindBrowserWithWebContents(web_contents_); |
522 if (!browser) | 499 if (!browser) |
523 return nullptr; | 500 return nullptr; |
524 | 501 |
525 return browser->window()->GetLocationBar()->GetOmniboxView(); | 502 return browser->window()->GetLocationBar()->GetOmniboxView(); |
526 #endif // OS_ANDROID | 503 #endif // OS_ANDROID |
527 } | 504 } |
528 | 505 |
529 OmniboxView* SearchTabHelper::GetOmniboxView() { | 506 OmniboxView* SearchTabHelper::GetOmniboxView() { |
530 return const_cast<OmniboxView*>( | 507 return const_cast<OmniboxView*>( |
531 const_cast<const SearchTabHelper*>(this)->GetOmniboxView()); | 508 const_cast<const SearchTabHelper*>(this)->GetOmniboxView()); |
532 } | 509 } |
533 | 510 |
534 Profile* SearchTabHelper::profile() const { | 511 Profile* SearchTabHelper::profile() const { |
535 return Profile::FromBrowserContext(web_contents_->GetBrowserContext()); | 512 return Profile::FromBrowserContext(web_contents_->GetBrowserContext()); |
536 } | 513 } |
537 | 514 |
538 bool SearchTabHelper::IsInputInProgress() const { | 515 bool SearchTabHelper::IsInputInProgress() const { |
539 if (model_.mode().is_ntp()) | 516 if (model_.mode().is_ntp()) |
540 return false; | 517 return false; |
541 const OmniboxView* omnibox_view = GetOmniboxView(); | 518 const OmniboxView* omnibox_view = GetOmniboxView(); |
542 return omnibox_view && | 519 return omnibox_view && |
543 omnibox_view->model()->focus_state() == OMNIBOX_FOCUS_VISIBLE; | 520 omnibox_view->model()->focus_state() == OMNIBOX_FOCUS_VISIBLE; |
544 } | 521 } |
OLD | NEW |