Index: chrome/browser/ui/views/frame/contents_container.cc |
diff --git a/chrome/browser/ui/views/frame/contents_container.cc b/chrome/browser/ui/views/frame/contents_container.cc |
index 4603f9ad3e48af8d39346db592288a6423291ba2..94cd7123be82d4854bdcc1667f06cd7a48a67a00 100644 |
--- a/chrome/browser/ui/views/frame/contents_container.cc |
+++ b/chrome/browser/ui/views/frame/contents_container.cc |
@@ -98,6 +98,8 @@ void ContentsContainer::MakeOverlayContentsActiveContents() { |
active_ = overlay_; |
overlay_ = NULL; |
overlay_web_contents_ = NULL; |
+ // Unregister from observing previous |overlay_web_contents_|. |
+ registrar_.RemoveAll(); |
// Since |overlay_| has been nuked, shadow view is not needed anymore. |
// Note that the previous |active_| will be deleted by caller (see |
// BrowserView::ActiveTabChanged()) after this call, hence removing the old |
@@ -145,9 +147,8 @@ void ContentsContainer::SetOverlay(views::WebView* overlay, |
if (overlay_web_contents_ != overlay_web_contents) { |
#if !defined(OS_WIN) |
- // Unregister from previous overlay web contents' render view host. |
- if (overlay_web_contents_) |
- registrar_.RemoveAll(); |
+ // Unregister from observing previous |overlay_web_contents_|. |
+ registrar_.RemoveAll(); |
#endif // !defined(OS_WIN) |
overlay_web_contents_ = overlay_web_contents; |
@@ -273,6 +274,9 @@ void ContentsContainer::Observe(int type, |
DCHECK_EQ(content::NOTIFICATION_RENDER_WIDGET_HOST_DID_UPDATE_BACKING_STORE, |
type); |
// Remove shadow view if it's not needed. |
- if (overlay_ && !draw_drop_shadow_) |
+ if (overlay_ && !draw_drop_shadow_ && overlay_web_contents_ && |
+ (content::Source<content::RenderWidgetHost>(source)).ptr() == |
sky
2013/04/05 19:44:17
Shouldn't this be a DCHECK?
kuan
2013/04/05 21:54:11
this is the dilemma i have:
@159, GetRenderViewHos
sky
2013/04/05 23:00:08
Only register if rvh is non-null.
kuan
2013/04/05 23:10:54
Done.
|
+ overlay_web_contents_->GetRenderViewHost()) { |
shadow_view_.reset(); |
+ } |
} |