Index: chrome/browser/instant/instant_loader.cc |
diff --git a/chrome/browser/instant/instant_loader.cc b/chrome/browser/instant/instant_loader.cc |
index 1eadd705ac5e1b1521e76df6c5ae38f1c9df759e..34fa5c0f0d600c5ed7764dfcd3ecdaa5af4ed9bc 100644 |
--- a/chrome/browser/instant/instant_loader.cc |
+++ b/chrome/browser/instant/instant_loader.cc |
@@ -6,7 +6,6 @@ |
#include "chrome/browser/content_settings/tab_specific_content_settings.h" |
#include "chrome/browser/instant/instant_controller.h" |
-#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/thumbnails/thumbnail_tab_helper.h" |
#include "chrome/browser/ui/blocked_content/blocked_content_tab_helper.h" |
#include "chrome/browser/ui/constrained_window_tab_helper.h" |
@@ -14,13 +13,11 @@ |
#include "chrome/browser/ui/tab_contents/core_tab_helper.h" |
#include "chrome/browser/ui/tab_contents/core_tab_helper_delegate.h" |
#include "chrome/browser/ui/tab_contents/tab_contents.h" |
-#include "chrome/common/render_messages.h" |
-#include "content/public/browser/navigation_entry.h" |
#include "content/public/browser/notification_source.h" |
#include "content/public/browser/notification_types.h" |
-#include "content/public/browser/render_view_host.h" |
#include "content/public/browser/render_widget_host_view.h" |
#include "content/public/browser/web_contents_delegate.h" |
+#include "ipc/ipc_message.h" |
namespace { |
@@ -47,19 +44,10 @@ class InstantLoaderUserData : public base::SupportsUserData::Data { |
class InstantLoader::WebContentsDelegateImpl |
: public ConstrainedWindowTabHelperDelegate, |
public CoreTabHelperDelegate, |
- public content::WebContentsDelegate, |
- public content::WebContentsObserver { |
+ public content::WebContentsDelegate { |
public: |
explicit WebContentsDelegateImpl(InstantLoader* loader); |
- bool is_pointer_down_from_activate() const { |
- return is_pointer_down_from_activate_; |
- } |
- |
- // Start observing |web_contents| instead of whatever is currently being |
- // observed. If |web_contents| is NULL, effectively stops observing. |
- void ObserveContents(content::WebContents* web_contents); |
- |
private: |
// Overridden from ConstrainedWindowTabHelperDelegate: |
virtual bool ShouldFocusConstrainedWindow() OVERRIDE; |
@@ -83,47 +71,16 @@ class InstantLoader::WebContentsDelegateImpl |
virtual void DragEnded() OVERRIDE; |
virtual bool OnGoToEntryOffset(int offset) OVERRIDE; |
- // Overridden from content::WebContentsObserver: |
- virtual void DidFinishLoad( |
- int64 frame_id, |
- const GURL& validated_url, |
- bool is_main_frame, |
- content::RenderViewHost* render_view_host) OVERRIDE; |
- virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; |
- |
- // Message from renderer indicating the page has suggestions. |
- void OnSetSuggestions(int page_id, |
- const std::vector<InstantSuggestion>& suggestions); |
- |
- // Message from the renderer determining whether it supports the Instant API. |
- void OnInstantSupportDetermined(int page_id, bool result); |
- |
- // Message from the renderer requesting the preview be shown. |
- void OnShowInstantPreview(int page_id, |
- InstantShownReason reason, |
- int height, |
- InstantSizeUnits units); |
- |
- void CommitFromPointerReleaseIfNecessary(); |
- void MaybeSetAndNotifyInstantSupportDetermined(bool supports_instant); |
+ void MaybeCommitFromPointerRelease(); |
InstantLoader* const loader_; |
- // True if the mouse or a touch pointer is down from an activate. |
- bool is_pointer_down_from_activate_; |
- |
DISALLOW_COPY_AND_ASSIGN(WebContentsDelegateImpl); |
}; |
InstantLoader::WebContentsDelegateImpl::WebContentsDelegateImpl( |
InstantLoader* loader) |
- : loader_(loader), |
- is_pointer_down_from_activate_(false) { |
-} |
- |
-void InstantLoader::WebContentsDelegateImpl::ObserveContents( |
- content::WebContents* web_contents) { |
- Observe(web_contents); |
+ : loader_(loader) { |
} |
bool InstantLoader::WebContentsDelegateImpl::ShouldFocusConstrainedWindow() { |
@@ -136,8 +93,8 @@ bool InstantLoader::WebContentsDelegateImpl::ShouldFocusConstrainedWindow() { |
void InstantLoader::WebContentsDelegateImpl::SwapTabContents( |
content::WebContents* old_contents, |
content::WebContents* new_contents) { |
- // If this is being called, something is swapping in to our |
- // |preview_contents_| before we've added it to the tab strip. |
+ // If this is being called, something is swapping in to loader's |contents_| |
+ // before we've added it to the tab strip. |
loader_->ReplacePreviewContents(old_contents, new_contents); |
} |
@@ -151,125 +108,53 @@ bool InstantLoader::WebContentsDelegateImpl::ShouldFocusPageAfterCrash() { |
} |
void InstantLoader::WebContentsDelegateImpl::LostCapture() { |
- CommitFromPointerReleaseIfNecessary(); |
+ MaybeCommitFromPointerRelease(); |
} |
void InstantLoader::WebContentsDelegateImpl::WebContentsFocused( |
- content::WebContents* contents) { |
- loader_->controller_->InstantLoaderContentsFocused(loader_); |
+ content::WebContents* /* contents */) { |
+ loader_->controller_->InstantLoaderContentsFocused(); |
} |
bool InstantLoader::WebContentsDelegateImpl::CanDownload( |
- content::RenderViewHost* render_view_host, |
- int request_id, |
- const std::string& request_method) { |
+ content::RenderViewHost* /* render_view_host */, |
+ int /* request_id */, |
+ const std::string& /* request_method */) { |
// Downloads are disabled. |
return false; |
} |
void InstantLoader::WebContentsDelegateImpl::HandleMouseDown() { |
- is_pointer_down_from_activate_ = true; |
+ loader_->is_pointer_down_from_activate_ = true; |
} |
void InstantLoader::WebContentsDelegateImpl::HandleMouseUp() { |
- CommitFromPointerReleaseIfNecessary(); |
+ MaybeCommitFromPointerRelease(); |
} |
void InstantLoader::WebContentsDelegateImpl::HandlePointerActivate() { |
- is_pointer_down_from_activate_ = true; |
+ loader_->is_pointer_down_from_activate_ = true; |
} |
void InstantLoader::WebContentsDelegateImpl::HandleGestureEnd() { |
- CommitFromPointerReleaseIfNecessary(); |
+ MaybeCommitFromPointerRelease(); |
} |
void InstantLoader::WebContentsDelegateImpl::DragEnded() { |
// If the user drags, we won't get a mouse up (at least on Linux). Commit the |
// Instant result when the drag ends, so that during the drag the page won't |
// move around. |
- CommitFromPointerReleaseIfNecessary(); |
+ MaybeCommitFromPointerRelease(); |
} |
bool InstantLoader::WebContentsDelegateImpl::OnGoToEntryOffset(int offset) { |
return false; |
} |
-void InstantLoader::WebContentsDelegateImpl::DidFinishLoad( |
- int64 frame_id, |
- const GURL& validated_url, |
- bool is_main_frame, |
- content::RenderViewHost* render_view_host) { |
- if (is_main_frame && !loader_->supports_instant_) |
- Send(new ChromeViewMsg_DetermineIfPageSupportsInstant(routing_id())); |
-} |
- |
-bool InstantLoader::WebContentsDelegateImpl::OnMessageReceived( |
- const IPC::Message& message) { |
- bool handled = true; |
- IPC_BEGIN_MESSAGE_MAP(WebContentsDelegateImpl, message) |
- IPC_MESSAGE_HANDLER(ChromeViewHostMsg_SetSuggestions, OnSetSuggestions) |
- IPC_MESSAGE_HANDLER(ChromeViewHostMsg_InstantSupportDetermined, |
- OnInstantSupportDetermined) |
- IPC_MESSAGE_HANDLER(ChromeViewHostMsg_ShowInstantPreview, |
- OnShowInstantPreview); |
- IPC_MESSAGE_UNHANDLED(handled = false) |
- IPC_END_MESSAGE_MAP() |
- return handled; |
-} |
- |
-void InstantLoader::WebContentsDelegateImpl::OnSetSuggestions( |
- int page_id, |
- const std::vector<InstantSuggestion>& suggestions) { |
- DCHECK(loader_->preview_contents()); |
- DCHECK(loader_->preview_contents_->web_contents()); |
- content::NavigationEntry* entry = loader_->preview_contents_->web_contents()-> |
- GetController().GetActiveEntry(); |
- if (entry && page_id == entry->GetPageID()) { |
- MaybeSetAndNotifyInstantSupportDetermined(true); |
- loader_->controller_->SetSuggestions(loader_, suggestions); |
- } |
-} |
- |
-void InstantLoader::WebContentsDelegateImpl::OnInstantSupportDetermined( |
- int page_id, |
- bool result) { |
- DCHECK(loader_->preview_contents()); |
- DCHECK(loader_->preview_contents_->web_contents()); |
- content::NavigationEntry* entry = loader_->preview_contents_->web_contents()-> |
- GetController().GetActiveEntry(); |
- if (entry && page_id == entry->GetPageID()) |
- MaybeSetAndNotifyInstantSupportDetermined(result); |
-} |
- |
-void InstantLoader::WebContentsDelegateImpl::OnShowInstantPreview( |
- int page_id, |
- InstantShownReason reason, |
- int height, |
- InstantSizeUnits units) { |
- DCHECK(loader_->preview_contents()); |
- DCHECK(loader_->preview_contents_->web_contents()); |
- content::NavigationEntry* entry = loader_->preview_contents_->web_contents()-> |
- GetController().GetActiveEntry(); |
- if (entry && page_id == entry->GetPageID()) { |
- MaybeSetAndNotifyInstantSupportDetermined(true); |
- loader_->controller_->ShowInstantPreview(loader_, reason, height, units); |
- } |
-} |
- |
-void InstantLoader::WebContentsDelegateImpl |
- ::CommitFromPointerReleaseIfNecessary() { |
- if (is_pointer_down_from_activate_) { |
- is_pointer_down_from_activate_ = false; |
- loader_->controller_->CommitInstantLoader(loader_); |
- } |
-} |
- |
-void InstantLoader::WebContentsDelegateImpl |
- ::MaybeSetAndNotifyInstantSupportDetermined(bool supports_instant) { |
- // If we already determined that the loader supports Instant, nothing to do. |
- if (!loader_->supports_instant_) { |
- loader_->supports_instant_ = supports_instant; |
- loader_->controller_->InstantSupportDetermined(loader_, supports_instant); |
+void InstantLoader::WebContentsDelegateImpl::MaybeCommitFromPointerRelease() { |
+ if (loader_->is_pointer_down_from_activate_) { |
+ loader_->is_pointer_down_from_activate_ = false; |
+ loader_->controller_->CommitIfCurrent(INSTANT_COMMIT_FOCUS_LOST); |
} |
} |
@@ -277,145 +162,118 @@ void InstantLoader::WebContentsDelegateImpl |
// static |
InstantLoader* InstantLoader::FromWebContents( |
- content::WebContents* web_contents) { |
+ const content::WebContents* web_contents) { |
InstantLoaderUserData* data = static_cast<InstantLoaderUserData*>( |
web_contents->GetUserData(&kUserDataKey)); |
return data ? data->loader() : NULL; |
} |
InstantLoader::InstantLoader(InstantController* controller, |
- const std::string& instant_url, |
- const TabContents* tab_contents) |
- : controller_(controller), |
- preview_delegate_(new WebContentsDelegateImpl( |
- ALLOW_THIS_IN_INITIALIZER_LIST(this))), |
- preview_contents_( |
- TabContents::Factory::CreateTabContents( |
- content::WebContents::CreateWithSessionStorage( |
- tab_contents->profile(), NULL, MSG_ROUTING_NONE, |
- tab_contents->web_contents(), |
- tab_contents->web_contents()->GetController(). |
- GetSessionStorageNamespaceMap()))), |
+ const std::string& instant_url) |
+ : client_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), |
+ controller_(controller), |
+ delegate_(new WebContentsDelegateImpl( |
+ ALLOW_THIS_IN_INITIALIZER_LIST(this))), |
+ instant_url_(instant_url), |
supports_instant_(false), |
- instant_url_(instant_url) { |
+ is_pointer_down_from_activate_(false) { |
} |
InstantLoader::~InstantLoader() { |
} |
-void InstantLoader::Init() { |
+void InstantLoader::InitContents(const content::WebContents* active_tab) { |
+ contents_.reset(content::WebContents::CreateWithSessionStorage( |
+ active_tab->GetBrowserContext(), NULL, MSG_ROUTING_NONE, active_tab, |
+ active_tab->GetController().GetSessionStorageNamespaceMap())); |
+ // Not a leak. TabContents will delete itself when the WebContents is gone. |
+ TabContents::Factory::CreateTabContents(contents()); |
SetupPreviewContents(); |
- // This HTTP header and value are set on loads that originate from instant. |
+ |
+ // This HTTP header and value are set on loads that originate from Instant. |
const char kInstantHeader[] = "X-Purpose: Instant"; |
DVLOG(1) << "LoadURL: " << instant_url_; |
- preview_contents_->web_contents()->GetController().LoadURL(GURL(instant_url_), |
- content::Referrer(), content::PAGE_TRANSITION_GENERATED, kInstantHeader); |
- preview_contents_->web_contents()->WasHidden(); |
+ contents_->GetController().LoadURL(GURL(instant_url_), content::Referrer(), |
+ content::PAGE_TRANSITION_GENERATED, kInstantHeader); |
+ contents_->WasHidden(); |
} |
-void InstantLoader::Update(const string16& user_text, bool verbatim) { |
- // TODO: Support real cursor position. |
+content::WebContents* InstantLoader::ReleaseContents() { |
+ CleanupPreviewContents(); |
+ return contents_.release(); |
+} |
+ |
+void InstantLoader::DidNavigate( |
+ const history::HistoryAddPageArgs& add_page_args) { |
+ last_navigation_ = add_page_args; |
+} |
+ |
+void InstantLoader::Update(const string16& text, |
+ size_t selection_start, |
+ size_t selection_end, |
+ bool verbatim) { |
last_navigation_ = history::HistoryAddPageArgs(); |
- content::RenderViewHost* rvh = |
- preview_contents_->web_contents()->GetRenderViewHost(); |
- rvh->Send(new ChromeViewMsg_SearchBoxChange(rvh->GetRoutingID(), user_text, |
- verbatim, user_text.size(), user_text.size())); |
+ client_.Update(text, selection_start, selection_end, verbatim); |
+} |
+ |
+void InstantLoader::Submit(const string16& text) { |
+ client_.Submit(text); |
+} |
+ |
+void InstantLoader::Cancel(const string16& text) { |
+ client_.Cancel(text); |
} |
void InstantLoader::SetOmniboxBounds(const gfx::Rect& bounds) { |
- content::RenderViewHost* rvh = |
- preview_contents_->web_contents()->GetRenderViewHost(); |
- rvh->Send(new ChromeViewMsg_SearchBoxResize(rvh->GetRoutingID(), bounds)); |
+ client_.SetOmniboxBounds(bounds); |
} |
void InstantLoader::SendAutocompleteResults( |
const std::vector<InstantAutocompleteResult>& results) { |
- content::RenderViewHost* rvh = |
- preview_contents_->web_contents()->GetRenderViewHost(); |
- rvh->Send(new ChromeViewMsg_SearchBoxAutocompleteResults(rvh->GetRoutingID(), |
- results)); |
+ client_.SendAutocompleteResults(results); |
} |
-void InstantLoader::SendThemeBackgroundInfo( |
- const ThemeBackgroundInfo& theme_info) { |
- content::RenderViewHost* rvh = |
- preview_contents_->web_contents()->GetRenderViewHost(); |
- rvh->Send(new ChromeViewMsg_SearchBoxThemeChanged(rvh->GetRoutingID(), |
- theme_info)); |
-} |
- |
-void InstantLoader::SendThemeAreaHeight(int height) { |
- content::RenderViewHost* rvh = |
- preview_contents_->web_contents()->GetRenderViewHost(); |
- rvh->Send(new ChromeViewMsg_SearchBoxThemeAreaHeightChanged( |
- rvh->GetRoutingID(), height)); |
+void InstantLoader::UpOrDownKeyPressed(int count) { |
+ client_.UpOrDownKeyPressed(count); |
} |
-void InstantLoader::SetDisplayInstantResults(bool display_instant_results) { |
- content::RenderViewHost* rvh = |
- preview_contents_->web_contents()->GetRenderViewHost(); |
- rvh->Send(new ChromeViewMsg_SearchBoxSetDisplayInstantResults( |
- rvh->GetRoutingID(), display_instant_results)); |
+void InstantLoader::SearchModeChanged(const chrome::search::Mode& mode) { |
+ client_.SearchModeChanged(mode); |
} |
-void InstantLoader::OnUpOrDownKeyPressed(int count) { |
- content::RenderViewHost* rvh = |
- preview_contents_->web_contents()->GetRenderViewHost(); |
- rvh->Send(new ChromeViewMsg_SearchBoxUpOrDownKeyPressed(rvh->GetRoutingID(), |
- count)); |
+void InstantLoader::SendThemeBackgroundInfo( |
+ const ThemeBackgroundInfo& theme_info) { |
+ client_.SendThemeBackgroundInfo(theme_info); |
} |
-void InstantLoader::SearchModeChanged(const chrome::search::Mode& mode) { |
- content::RenderViewHost* rvh = |
- preview_contents_->web_contents()->GetRenderViewHost(); |
- rvh->Send(new ChromeViewMsg_SearchBoxModeChanged(rvh->GetRoutingID(), mode)); |
+void InstantLoader::SendThemeAreaHeight(int height) { |
+ client_.SendThemeAreaHeight(height); |
} |
-void InstantLoader::DidNavigate( |
- const history::HistoryAddPageArgs& add_page_args) { |
- last_navigation_ = add_page_args; |
+void InstantLoader::SetDisplayInstantResults(bool display_instant_results) { |
+ client_.SetDisplayInstantResults(display_instant_results); |
} |
-TabContents* InstantLoader::ReleasePreviewContents(InstantCommitType type, |
- const string16& text) { |
- content::RenderViewHost* rvh = |
- preview_contents_->web_contents()->GetRenderViewHost(); |
- if (type == INSTANT_COMMIT_FOCUS_LOST) |
- rvh->Send(new ChromeViewMsg_SearchBoxCancel(rvh->GetRoutingID(), text)); |
- else |
- rvh->Send(new ChromeViewMsg_SearchBoxSubmit(rvh->GetRoutingID(), text)); |
- CleanupPreviewContents(); |
- return preview_contents_.release(); |
+void InstantLoader::SetSuggestions( |
+ const std::vector<InstantSuggestion>& suggestions) { |
+ InstantSupportDetermined(true); |
+ controller_->SetSuggestions(contents(), suggestions); |
} |
-void InstantLoader::CleanupPreviewContents() { |
- content::WebContents* old_contents = preview_contents_->web_contents(); |
- old_contents->RemoveUserData(&kUserDataKey); |
- old_contents->SetDelegate(NULL); |
- preview_delegate_->ObserveContents(NULL); |
- |
- BlockedContentTabHelper::FromWebContents(old_contents)-> |
- SetAllContentsBlocked(false); |
- ConstrainedWindowTabHelper::FromWebContents(old_contents)->set_delegate(NULL); |
- TabSpecificContentSettings::FromWebContents(old_contents)-> |
- SetPopupsBlocked(false); |
- CoreTabHelper::FromWebContents(old_contents)->set_delegate(NULL); |
- if (ThumbnailTabHelper* thumbnail_tab_helper = |
- ThumbnailTabHelper::FromWebContents(old_contents)) |
- thumbnail_tab_helper->set_enabled(true); |
+void InstantLoader::InstantSupportDetermined(bool supports_instant) { |
+ // If we had already determined that the page supports Instant, nothing to do. |
+ if (supports_instant_) |
+ return; |
-#if defined(OS_MACOSX) |
- if (content::RenderWidgetHostView* rwhv = |
- old_contents->GetRenderWidgetHostView()) |
- rwhv->SetTakesFocusOnlyOnMouseDown(false); |
- registrar_.Remove(this, content::NOTIFICATION_RENDER_VIEW_HOST_CHANGED, |
- content::Source<content::NavigationController>( |
- &old_contents->GetController())); |
-#endif |
+ supports_instant_ = supports_instant; |
+ controller_->InstantSupportDetermined(contents(), supports_instant); |
} |
-bool InstantLoader::IsPointerDownFromActivate() const { |
- return preview_delegate_->is_pointer_down_from_activate(); |
+void InstantLoader::ShowInstantPreview(InstantShownReason reason, |
+ int height, |
+ InstantSizeUnits units) { |
+ InstantSupportDetermined(true); |
+ controller_->ShowInstantPreview(reason, height, units); |
} |
void InstantLoader::Observe(int type, |
@@ -424,7 +282,7 @@ void InstantLoader::Observe(int type, |
#if defined(OS_MACOSX) |
if (type == content::NOTIFICATION_RENDER_VIEW_HOST_CHANGED) { |
if (content::RenderWidgetHostView* rwhv = |
- preview_contents_->web_contents()->GetRenderWidgetHostView()) |
+ contents_->GetRenderWidgetHostView()) |
rwhv->SetTakesFocusOnlyOnMouseDown(true); |
return; |
} |
@@ -433,46 +291,79 @@ void InstantLoader::Observe(int type, |
} |
void InstantLoader::SetupPreviewContents() { |
- content::WebContents* new_contents = preview_contents_->web_contents(); |
- new_contents->SetUserData(&kUserDataKey, new InstantLoaderUserData(this)); |
- WebContentsDelegateImpl* new_delegate = preview_delegate_.get(); |
- new_contents->SetDelegate(new_delegate); |
- new_delegate->ObserveContents(new_contents); |
+ client_.SetContents(contents()); |
+ contents_->SetUserData(&kUserDataKey, new InstantLoaderUserData(this)); |
+ contents_->SetDelegate(delegate_.get()); |
// Disable popups and such (mainly to avoid losing focus and reverting the |
// preview prematurely). |
- BlockedContentTabHelper::FromWebContents(new_contents)-> |
- SetAllContentsBlocked(true); |
- ConstrainedWindowTabHelper::FromWebContents(new_contents)-> |
- set_delegate(new_delegate); |
- TabSpecificContentSettings::FromWebContents(new_contents)-> |
- SetPopupsBlocked(true); |
- CoreTabHelper::FromWebContents(new_contents)->set_delegate(new_delegate); |
+ if (BlockedContentTabHelper* blocked_content_tab_helper = |
+ BlockedContentTabHelper::FromWebContents(contents())) |
+ blocked_content_tab_helper->SetAllContentsBlocked(true); |
+ if (ConstrainedWindowTabHelper* constrained_window_tab_helper = |
+ ConstrainedWindowTabHelper::FromWebContents(contents())) |
+ constrained_window_tab_helper->set_delegate(delegate_.get()); |
+ if (TabSpecificContentSettings* tab_specific_content_settings = |
+ TabSpecificContentSettings::FromWebContents(contents())) |
+ tab_specific_content_settings->SetPopupsBlocked(true); |
+ if (CoreTabHelper* core_tab_helper = |
+ CoreTabHelper::FromWebContents(contents())) |
+ core_tab_helper->set_delegate(delegate_.get()); |
if (ThumbnailTabHelper* thumbnail_tab_helper = |
- ThumbnailTabHelper::FromWebContents(new_contents)) |
+ ThumbnailTabHelper::FromWebContents(contents())) |
thumbnail_tab_helper->set_enabled(false); |
#if defined(OS_MACOSX) |
- // If |preview_contents_| does not currently have a RWHV, we will call |
- // SetTakesFocusOnlyOnMouseDown() as a result of the RENDER_VIEW_HOST_CHANGED |
- // notification. |
+ // If |contents_| doesn't yet have a RWHV, SetTakesFocusOnlyOnMouseDown() will |
+ // be called later, when NOTIFICATION_RENDER_VIEW_HOST_CHANGED is received. |
if (content::RenderWidgetHostView* rwhv = |
- new_contents->GetRenderWidgetHostView()) |
+ contents_->GetRenderWidgetHostView()) |
rwhv->SetTakesFocusOnlyOnMouseDown(true); |
registrar_.Add(this, content::NOTIFICATION_RENDER_VIEW_HOST_CHANGED, |
content::Source<content::NavigationController>( |
- &new_contents->GetController())); |
+ &contents_->GetController())); |
+#endif |
+} |
+ |
+void InstantLoader::CleanupPreviewContents() { |
+ client_.SetContents(NULL); |
+ contents_->RemoveUserData(&kUserDataKey); |
+ contents_->SetDelegate(NULL); |
+ |
+ if (BlockedContentTabHelper* blocked_content_tab_helper = |
+ BlockedContentTabHelper::FromWebContents(contents())) |
+ blocked_content_tab_helper->SetAllContentsBlocked(false); |
+ if (ConstrainedWindowTabHelper* constrained_window_tab_helper = |
+ ConstrainedWindowTabHelper::FromWebContents(contents())) |
+ constrained_window_tab_helper->set_delegate(NULL); |
+ if (TabSpecificContentSettings* tab_specific_content_settings = |
+ TabSpecificContentSettings::FromWebContents(contents())) |
+ tab_specific_content_settings->SetPopupsBlocked(false); |
+ if (CoreTabHelper* core_tab_helper = |
+ CoreTabHelper::FromWebContents(contents())) |
+ core_tab_helper->set_delegate(NULL); |
+ if (ThumbnailTabHelper* thumbnail_tab_helper = |
+ ThumbnailTabHelper::FromWebContents(contents())) |
+ thumbnail_tab_helper->set_enabled(true); |
+ |
+#if defined(OS_MACOSX) |
+ if (content::RenderWidgetHostView* rwhv = |
+ contents_->GetRenderWidgetHostView()) |
+ rwhv->SetTakesFocusOnlyOnMouseDown(false); |
+ registrar_.Remove(this, content::NOTIFICATION_RENDER_VIEW_HOST_CHANGED, |
+ content::Source<content::NavigationController>( |
+ &contents_->GetController())); |
#endif |
} |
void InstantLoader::ReplacePreviewContents(content::WebContents* old_contents, |
content::WebContents* new_contents) { |
- DCHECK_EQ(old_contents, preview_contents_->web_contents()); |
+ DCHECK_EQ(old_contents, contents()); |
CleanupPreviewContents(); |
// We release here without deleting so that the caller still has the |
- // responsibility for deleting the TabContents. |
- ignore_result(preview_contents_.release()); |
- preview_contents_.reset(TabContents::FromWebContents(new_contents)); |
+ // responsibility for deleting the WebContents. |
+ ignore_result(contents_.release()); |
+ contents_.reset(new_contents); |
SetupPreviewContents(); |
- controller_->SwappedTabContents(this); |
+ controller_->SwappedWebContents(); |
} |