| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/instant/instant_loader.h" | 5 #include "chrome/browser/instant/instant_loader.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <utility> | 9 #include <utility> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 130 default: | 130 default: |
| 131 NOTREACHED(); | 131 NOTREACHED(); |
| 132 break; | 132 break; |
| 133 } | 133 } |
| 134 } | 134 } |
| 135 | 135 |
| 136 // TabContentsDelegateImpl ----------------------------------------------------- | 136 // TabContentsDelegateImpl ----------------------------------------------------- |
| 137 | 137 |
| 138 class InstantLoader::TabContentsDelegateImpl | 138 class InstantLoader::TabContentsDelegateImpl |
| 139 : public TabContentsDelegate, | 139 : public TabContentsDelegate, |
| 140 public NotificationObserver { | 140 public NotificationObserver, |
| 141 public TabContentsObserver { |
| 141 public: | 142 public: |
| 142 explicit TabContentsDelegateImpl(InstantLoader* loader); | 143 explicit TabContentsDelegateImpl(InstantLoader* loader); |
| 143 | 144 |
| 144 // Invoked prior to loading a new URL. | 145 // Invoked prior to loading a new URL. |
| 145 void PrepareForNewLoad(); | 146 void PrepareForNewLoad(); |
| 146 | 147 |
| 147 // Invoked when the preview paints. Invokes PreviewPainted on the loader. | 148 // Invoked when the preview paints. Invokes PreviewPainted on the loader. |
| 148 void PreviewPainted(); | 149 void PreviewPainted(); |
| 149 | 150 |
| 150 bool is_mouse_down_from_activate() const { | 151 bool is_mouse_down_from_activate() const { |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 205 // instant result when the drag ends, so that during the drag the page won't | 206 // instant result when the drag ends, so that during the drag the page won't |
| 206 // move around. | 207 // move around. |
| 207 virtual void DragEnded() OVERRIDE; | 208 virtual void DragEnded() OVERRIDE; |
| 208 virtual bool CanDownload(int request_id) OVERRIDE; | 209 virtual bool CanDownload(int request_id) OVERRIDE; |
| 209 virtual void HandleMouseUp() OVERRIDE; | 210 virtual void HandleMouseUp() OVERRIDE; |
| 210 virtual void HandleMouseActivate() OVERRIDE; | 211 virtual void HandleMouseActivate() OVERRIDE; |
| 211 virtual bool OnGoToEntryOffset(int offset) OVERRIDE; | 212 virtual bool OnGoToEntryOffset(int offset) OVERRIDE; |
| 212 virtual bool ShouldAddNavigationToHistory( | 213 virtual bool ShouldAddNavigationToHistory( |
| 213 const history::HistoryAddPageArgs& add_page_args, | 214 const history::HistoryAddPageArgs& add_page_args, |
| 214 NavigationType::Type navigation_type) OVERRIDE; | 215 NavigationType::Type navigation_type) OVERRIDE; |
| 215 virtual void OnSetSuggestions( | |
| 216 int32 page_id, | |
| 217 const std::vector<std::string>& suggestions, | |
| 218 InstantCompleteBehavior behavior) OVERRIDE; | |
| 219 virtual void OnInstantSupportDetermined(int32 page_id, bool result) OVERRIDE; | |
| 220 virtual bool ShouldShowHungRendererDialog() OVERRIDE; | 216 virtual bool ShouldShowHungRendererDialog() OVERRIDE; |
| 221 | 217 |
| 218 // TabContentsObserver: |
| 219 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; |
| 220 |
| 222 private: | 221 private: |
| 223 typedef std::vector<scoped_refptr<history::HistoryAddPageArgs> > | 222 typedef std::vector<scoped_refptr<history::HistoryAddPageArgs> > |
| 224 AddPageVector; | 223 AddPageVector; |
| 225 | 224 |
| 225 // Message from renderer indicating the page has suggestions. |
| 226 void OnSetSuggestions( |
| 227 int32 page_id, |
| 228 const std::vector<std::string>& suggestions, |
| 229 InstantCompleteBehavior behavior); |
| 230 |
| 231 // Messages from the renderer when we've determined whether the page supports |
| 232 // instant. |
| 233 void OnInstantSupportDetermined(int32 page_id, bool result); |
| 234 |
| 226 void CommitFromMouseReleaseIfNecessary(); | 235 void CommitFromMouseReleaseIfNecessary(); |
| 227 | 236 |
| 228 InstantLoader* loader_; | 237 InstantLoader* loader_; |
| 229 | 238 |
| 230 NotificationRegistrar registrar_; | 239 NotificationRegistrar registrar_; |
| 231 | 240 |
| 232 // If we are registered for paint notifications on a RenderWidgetHost this | 241 // If we are registered for paint notifications on a RenderWidgetHost this |
| 233 // will contain a pointer to it. | 242 // will contain a pointer to it. |
| 234 RenderWidgetHost* registered_render_widget_host_; | 243 RenderWidgetHost* registered_render_widget_host_; |
| 235 | 244 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 247 bool is_mouse_down_from_activate_; | 256 bool is_mouse_down_from_activate_; |
| 248 | 257 |
| 249 // True if the user typed in the search box before the page loaded. | 258 // True if the user typed in the search box before the page loaded. |
| 250 bool user_typed_before_load_; | 259 bool user_typed_before_load_; |
| 251 | 260 |
| 252 DISALLOW_COPY_AND_ASSIGN(TabContentsDelegateImpl); | 261 DISALLOW_COPY_AND_ASSIGN(TabContentsDelegateImpl); |
| 253 }; | 262 }; |
| 254 | 263 |
| 255 InstantLoader::TabContentsDelegateImpl::TabContentsDelegateImpl( | 264 InstantLoader::TabContentsDelegateImpl::TabContentsDelegateImpl( |
| 256 InstantLoader* loader) | 265 InstantLoader* loader) |
| 257 : loader_(loader), | 266 : TabContentsObserver(loader->preview_contents()->tab_contents()), |
| 267 loader_(loader), |
| 258 registered_render_widget_host_(NULL), | 268 registered_render_widget_host_(NULL), |
| 259 waiting_for_new_page_(true), | 269 waiting_for_new_page_(true), |
| 260 is_mouse_down_from_activate_(false), | 270 is_mouse_down_from_activate_(false), |
| 261 user_typed_before_load_(false) { | 271 user_typed_before_load_(false) { |
| 262 DCHECK(loader->preview_contents()); | 272 DCHECK(loader->preview_contents()); |
| 263 registrar_.Add(this, NotificationType::INTERSTITIAL_ATTACHED, | 273 registrar_.Add(this, NotificationType::INTERSTITIAL_ATTACHED, |
| 264 Source<TabContents>(loader->preview_contents()->tab_contents())); | 274 Source<TabContents>(loader->preview_contents()->tab_contents())); |
| 265 } | 275 } |
| 266 | 276 |
| 267 void InstantLoader::TabContentsDelegateImpl::PrepareForNewLoad() { | 277 void InstantLoader::TabContentsDelegateImpl::PrepareForNewLoad() { |
| (...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 516 if (waiting_for_new_page_ && navigation_type == NavigationType::NEW_PAGE) | 526 if (waiting_for_new_page_ && navigation_type == NavigationType::NEW_PAGE) |
| 517 waiting_for_new_page_ = false; | 527 waiting_for_new_page_ = false; |
| 518 | 528 |
| 519 if (!waiting_for_new_page_) { | 529 if (!waiting_for_new_page_) { |
| 520 add_page_vector_.push_back( | 530 add_page_vector_.push_back( |
| 521 scoped_refptr<history::HistoryAddPageArgs>(add_page_args.Clone())); | 531 scoped_refptr<history::HistoryAddPageArgs>(add_page_args.Clone())); |
| 522 } | 532 } |
| 523 return false; | 533 return false; |
| 524 } | 534 } |
| 525 | 535 |
| 536 bool InstantLoader::TabContentsDelegateImpl::ShouldShowHungRendererDialog() { |
| 537 // If we allow the hung renderer dialog to be shown it'll gain focus, |
| 538 // stealing focus from the omnibox causing instant to be cancelled. Return |
| 539 // false so that doesn't happen. |
| 540 return false; |
| 541 } |
| 542 |
| 543 bool InstantLoader::TabContentsDelegateImpl::OnMessageReceived( |
| 544 const IPC::Message& message) { |
| 545 bool handled = true; |
| 546 IPC_BEGIN_MESSAGE_MAP(TabContentsDelegateImpl, message) |
| 547 IPC_MESSAGE_HANDLER(ViewHostMsg_SetSuggestions, OnSetSuggestions) |
| 548 IPC_MESSAGE_HANDLER(ViewHostMsg_InstantSupportDetermined, |
| 549 OnInstantSupportDetermined) |
| 550 IPC_MESSAGE_UNHANDLED(handled = false) |
| 551 IPC_END_MESSAGE_MAP() |
| 552 return handled; |
| 553 } |
| 554 |
| 526 void InstantLoader::TabContentsDelegateImpl::OnSetSuggestions( | 555 void InstantLoader::TabContentsDelegateImpl::OnSetSuggestions( |
| 527 int32 page_id, | 556 int32 page_id, |
| 528 const std::vector<std::string>& suggestions, | 557 const std::vector<std::string>& suggestions, |
| 529 InstantCompleteBehavior behavior) { | 558 InstantCompleteBehavior behavior) { |
| 530 TabContentsWrapper* source = loader_->preview_contents(); | 559 TabContentsWrapper* source = loader_->preview_contents(); |
| 531 if (!source->controller().GetActiveEntry() || | 560 if (!source->controller().GetActiveEntry() || |
| 532 page_id != source->controller().GetActiveEntry()->page_id()) | 561 page_id != source->controller().GetActiveEntry()->page_id()) |
| 533 return; | 562 return; |
| 534 | 563 |
| 535 if (suggestions.empty()) | 564 if (suggestions.empty()) |
| (...skipping 15 matching lines...) Expand all Loading... |
| 551 NotificationType::INSTANT_SUPPORT_DETERMINED, | 580 NotificationType::INSTANT_SUPPORT_DETERMINED, |
| 552 NotificationService::AllSources(), | 581 NotificationService::AllSources(), |
| 553 details); | 582 details); |
| 554 | 583 |
| 555 if (result) | 584 if (result) |
| 556 loader_->PageFinishedLoading(); | 585 loader_->PageFinishedLoading(); |
| 557 else | 586 else |
| 558 loader_->PageDoesntSupportInstant(user_typed_before_load_); | 587 loader_->PageDoesntSupportInstant(user_typed_before_load_); |
| 559 } | 588 } |
| 560 | 589 |
| 561 bool InstantLoader::TabContentsDelegateImpl::ShouldShowHungRendererDialog() { | |
| 562 // If we allow the hung renderer dialog to be shown it'll gain focus, | |
| 563 // stealing focus from the omnibox causing instant to be cancelled. Return | |
| 564 // false so that doesn't happen. | |
| 565 return false; | |
| 566 } | |
| 567 | |
| 568 void InstantLoader::TabContentsDelegateImpl | 590 void InstantLoader::TabContentsDelegateImpl |
| 569 ::CommitFromMouseReleaseIfNecessary() { | 591 ::CommitFromMouseReleaseIfNecessary() { |
| 570 bool was_down = is_mouse_down_from_activate_; | 592 bool was_down = is_mouse_down_from_activate_; |
| 571 is_mouse_down_from_activate_ = false; | 593 is_mouse_down_from_activate_ = false; |
| 572 if (was_down && loader_->ShouldCommitInstantOnMouseUp()) | 594 if (was_down && loader_->ShouldCommitInstantOnMouseUp()) |
| 573 loader_->CommitInstantLoader(); | 595 loader_->CommitInstantLoader(); |
| 574 } | 596 } |
| 575 | 597 |
| 576 // InstantLoader --------------------------------------------------------------- | 598 // InstantLoader --------------------------------------------------------------- |
| 577 | 599 |
| (...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 960 Source<NavigationController>(&preview_contents_->controller())); | 982 Source<NavigationController>(&preview_contents_->controller())); |
| 961 #endif | 983 #endif |
| 962 | 984 |
| 963 registrar_.Add( | 985 registrar_.Add( |
| 964 this, | 986 this, |
| 965 NotificationType::NAV_ENTRY_COMMITTED, | 987 NotificationType::NAV_ENTRY_COMMITTED, |
| 966 Source<NavigationController>(&preview_contents_->controller())); | 988 Source<NavigationController>(&preview_contents_->controller())); |
| 967 | 989 |
| 968 preview_contents_->tab_contents()->ShowContents(); | 990 preview_contents_->tab_contents()->ShowContents(); |
| 969 } | 991 } |
| OLD | NEW |