| Index: content/browser/tab_contents/tab_contents.cc
|
| diff --git a/content/browser/tab_contents/tab_contents.cc b/content/browser/tab_contents/tab_contents.cc
|
| index 390acb4f80225c0a3ab3f47c21b6cbbdb5048403..4f77d6080c9d2a0b7fb578c8f40caef5d4606e38 100644
|
| --- a/content/browser/tab_contents/tab_contents.cc
|
| +++ b/content/browser/tab_contents/tab_contents.cc
|
| @@ -14,9 +14,11 @@
|
| #include "base/time.h"
|
| #include "base/utf_string_conversions.h"
|
| #include "content/browser/child_process_security_policy.h"
|
| +#include "content/browser/content_frame.h"
|
| #include "content/browser/debugger/devtools_manager_impl.h"
|
| #include "content/browser/download/download_manager.h"
|
| #include "content/browser/download/download_stats.h"
|
| +#include "content/browser/frame_map.h"
|
| #include "content/browser/host_zoom_map.h"
|
| #include "content/browser/in_process_webkit/session_storage_namespace.h"
|
| #include "content/browser/intents/intents_host_impl.h"
|
| @@ -184,7 +186,7 @@ void MakeNavigateParams(const NavigationEntry& entry,
|
| TabContents::TabContents(content::BrowserContext* browser_context,
|
| SiteInstance* site_instance,
|
| int routing_id,
|
| - const TabContents* base_tab_contents,
|
| + content::ContentFrame* opener,
|
| SessionStorageNamespace* session_storage_namespace)
|
| : delegate_(NULL),
|
| ALLOW_THIS_IN_INITIALIZER_LIST(controller_(
|
| @@ -216,13 +218,22 @@ TabContents::TabContents(content::BrowserContext* browser_context,
|
| static_cast<int>(content::kMaximumZoomFactor * 100)),
|
| temporary_zoom_settings_(false),
|
| content_restrictions_(0),
|
| - view_type_(content::VIEW_TYPE_TAB_CONTENTS) {
|
| + view_type_(content::VIEW_TYPE_TAB_CONTENTS),
|
| + content_frame_(
|
| + browser_context->frame_mapper()->InitializeFrame(
|
| + true, *this, opener)) {
|
| render_manager_.Init(browser_context, site_instance, routing_id);
|
|
|
| + // TODO(supersat): This is a hack and should be removed.
|
| + browser_context->frame_mapper()->UpdateFrame(
|
| + content_frame_, render_view_host()->process()->GetID(),
|
| + render_view_host()->routing_id(),
|
| + -1 /* We don't know the frame id yet */);
|
| +
|
| // We have the initial size of the view be based on the size of the passed in
|
| // tab contents (normally a tab from the same window).
|
| - view_->CreateView(base_tab_contents ?
|
| - base_tab_contents->view()->GetContainerSize() : gfx::Size());
|
| + view_->CreateView(opener ?
|
| + opener->tab_contents().view()->GetContainerSize() : gfx::Size());
|
|
|
| #if defined(ENABLE_JAVA_BRIDGE)
|
| java_bridge_dispatcher_host_manager_.reset(
|
| @@ -262,6 +273,10 @@ TabContents::~TabContents() {
|
| base::TimeTicks::Now() - tab_close_start_time_);
|
| }
|
|
|
| + // Remove the top-level frame from the frame mapper
|
| + browser_context()->frame_mapper()->RemoveFrame(content_frame_);
|
| + delete content_frame_;
|
| +
|
| FOR_EACH_OBSERVER(TabContentsObserver, observers_, TabContentsDestroyed());
|
|
|
| set_delegate(NULL);
|
| @@ -698,7 +713,7 @@ TabContents* TabContents::Clone() {
|
| TabContents* tc = new TabContents(
|
| browser_context(),
|
| SiteInstance::CreateSiteInstance(browser_context()),
|
| - MSG_ROUTING_NONE, this, NULL);
|
| + MSG_ROUTING_NONE, content_frame_, NULL);
|
| tc->controller().CopyStateFrom(controller_);
|
| return tc;
|
| }
|
| @@ -2000,7 +2015,7 @@ TabContents::GetLastCommittedNavigationEntryForRenderManager() {
|
| }
|
|
|
| bool TabContents::CreateRenderViewForRenderManager(
|
| - RenderViewHost* render_view_host) {
|
| + RenderViewHost* render_view_host, int opener_route_id) {
|
| // Can be NULL during tests.
|
| RenderWidgetHostView* rwh_view = view_->CreateViewForWidget(render_view_host);
|
|
|
| @@ -2013,7 +2028,8 @@ bool TabContents::CreateRenderViewForRenderManager(
|
| int32 max_page_id =
|
| GetMaxPageIDForSiteInstance(render_view_host->site_instance());
|
|
|
| - if (!render_view_host->CreateRenderView(string16(), max_page_id))
|
| + if (!render_view_host->CreateRenderView(string16(), opener_route_id,
|
| + max_page_id))
|
| return false;
|
|
|
| #if defined(OS_LINUX) || defined(OS_OPENBSD)
|
|
|