Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(222)

Side by Side Diff: content/browser/tab_contents/tab_contents.cc

Issue 8760024: Cross-process postMessage (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "content/browser/tab_contents/tab_contents.h" 5 #include "content/browser/tab_contents/tab_contents.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
11 #include "base/metrics/stats_counters.h" 11 #include "base/metrics/stats_counters.h"
12 #include "base/string16.h" 12 #include "base/string16.h"
13 #include "base/string_util.h" 13 #include "base/string_util.h"
14 #include "base/time.h" 14 #include "base/time.h"
15 #include "base/utf_string_conversions.h" 15 #include "base/utf_string_conversions.h"
16 #include "content/browser/browser_context.h" 16 #include "content/browser/browser_context.h"
17 #include "content/browser/browsing_instance_frame_id.h"
17 #include "content/browser/child_process_security_policy.h" 18 #include "content/browser/child_process_security_policy.h"
18 #include "content/browser/debugger/devtools_manager.h" 19 #include "content/browser/debugger/devtools_manager.h"
19 #include "content/browser/download/download_manager.h" 20 #include "content/browser/download/download_manager.h"
20 #include "content/browser/download/download_stats.h" 21 #include "content/browser/download/download_stats.h"
22 #include "content/browser/frame_mapper.h"
21 #include "content/browser/host_zoom_map.h" 23 #include "content/browser/host_zoom_map.h"
22 #include "content/browser/in_process_webkit/session_storage_namespace.h" 24 #include "content/browser/in_process_webkit/session_storage_namespace.h"
23 #include "content/browser/load_from_memory_cache_details.h" 25 #include "content/browser/load_from_memory_cache_details.h"
24 #include "content/browser/load_notification_details.h" 26 #include "content/browser/load_notification_details.h"
25 #include "content/browser/renderer_host/render_process_host_impl.h" 27 #include "content/browser/renderer_host/render_process_host_impl.h"
26 #include "content/browser/renderer_host/render_view_host.h" 28 #include "content/browser/renderer_host/render_view_host.h"
27 #include "content/browser/renderer_host/render_widget_host_view.h" 29 #include "content/browser/renderer_host/render_widget_host_view.h"
28 #include "content/browser/renderer_host/resource_dispatcher_host.h" 30 #include "content/browser/renderer_host/resource_dispatcher_host.h"
29 #include "content/browser/renderer_host/resource_request_details.h" 31 #include "content/browser/renderer_host/resource_request_details.h"
30 #include "content/browser/site_instance.h" 32 #include "content/browser/site_instance.h"
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 params->current_history_list_offset = controller.last_committed_entry_index(); 157 params->current_history_list_offset = controller.last_committed_entry_index();
156 params->current_history_list_length = controller.entry_count(); 158 params->current_history_list_length = controller.entry_count();
157 params->url = entry.url(); 159 params->url = entry.url();
158 params->referrer = entry.referrer(); 160 params->referrer = entry.referrer();
159 params->transition = entry.transition_type(); 161 params->transition = entry.transition_type();
160 params->state = entry.content_state(); 162 params->state = entry.content_state();
161 params->navigation_type = 163 params->navigation_type =
162 GetNavigationType(controller.browser_context(), entry, reload_type); 164 GetNavigationType(controller.browser_context(), entry, reload_type);
163 params->request_time = base::Time::Now(); 165 params->request_time = base::Time::Now();
164 params->extra_headers = entry.extra_headers(); 166 params->extra_headers = entry.extra_headers();
167 params->opener_browsing_instance_frame_id =
168 entry.opener_browsing_instance_frame_id();
165 169
166 if (delegate) 170 if (delegate)
167 delegate->AddNavigationHeaders(params->url, &params->extra_headers); 171 delegate->AddNavigationHeaders(params->url, &params->extra_headers);
168 } 172 }
169 173
170 } // namespace 174 } // namespace
171 175
172 176
173 // TabContents ---------------------------------------------------------------- 177 // TabContents ----------------------------------------------------------------
174 178
(...skipping 26 matching lines...) Expand all
201 #endif 205 #endif
202 is_showing_before_unload_dialog_(false), 206 is_showing_before_unload_dialog_(false),
203 opener_web_ui_type_(WebUI::kNoWebUI), 207 opener_web_ui_type_(WebUI::kNoWebUI),
204 closed_by_user_gesture_(false), 208 closed_by_user_gesture_(false),
205 minimum_zoom_percent_( 209 minimum_zoom_percent_(
206 static_cast<int>(content::kMinimumZoomFactor * 100)), 210 static_cast<int>(content::kMinimumZoomFactor * 100)),
207 maximum_zoom_percent_( 211 maximum_zoom_percent_(
208 static_cast<int>(content::kMaximumZoomFactor * 100)), 212 static_cast<int>(content::kMaximumZoomFactor * 100)),
209 temporary_zoom_settings_(false), 213 temporary_zoom_settings_(false),
210 content_restrictions_(0), 214 content_restrictions_(0),
211 view_type_(content::VIEW_TYPE_TAB_CONTENTS) { 215 view_type_(content::VIEW_TYPE_TAB_CONTENTS),
216 browsing_instance_frame_(
217 browser_context->frame_mapper().AllocateNewTopLevelFrameId()) {
212 render_manager_.Init(browser_context, site_instance, routing_id); 218 render_manager_.Init(browser_context, site_instance, routing_id);
213 219
220 // TODO(supersat): This is a hack and should be removed.
221 if (routing_id > 0) {
222 browser_context->frame_mapper().UpdateFrame(
223 browsing_instance_frame_, render_view_host()->process()->GetID(),
224 routing_id, -1 /* We don't know the frame id yet */);
225 }
226
214 // We have the initial size of the view be based on the size of the passed in 227 // We have the initial size of the view be based on the size of the passed in
215 // tab contents (normally a tab from the same window). 228 // tab contents (normally a tab from the same window).
216 view_->CreateView(base_tab_contents ? 229 view_->CreateView(base_tab_contents ?
217 base_tab_contents->view()->GetContainerSize() : gfx::Size()); 230 base_tab_contents->view()->GetContainerSize() : gfx::Size());
218 231
219 #if defined(ENABLE_JAVA_BRIDGE) 232 #if defined(ENABLE_JAVA_BRIDGE)
220 java_bridge_dispatcher_host_manager_.reset( 233 java_bridge_dispatcher_host_manager_.reset(
221 new JavaBridgeDispatcherHostManager(this)); 234 new JavaBridgeDispatcherHostManager(this));
222 #endif 235 #endif
223 } 236 }
(...skipping 23 matching lines...) Expand all
247 host->view()->WillWmDestroy(); 260 host->view()->WillWmDestroy();
248 } 261 }
249 #endif 262 #endif
250 263
251 // OnCloseStarted isn't called in unit tests. 264 // OnCloseStarted isn't called in unit tests.
252 if (!tab_close_start_time_.is_null()) { 265 if (!tab_close_start_time_.is_null()) {
253 UMA_HISTOGRAM_TIMES("Tab.Close", 266 UMA_HISTOGRAM_TIMES("Tab.Close",
254 base::TimeTicks::Now() - tab_close_start_time_); 267 base::TimeTicks::Now() - tab_close_start_time_);
255 } 268 }
256 269
270 delete browsing_instance_frame_;
271
257 FOR_EACH_OBSERVER(TabContentsObserver, observers_, TabContentsDestroyed()); 272 FOR_EACH_OBSERVER(TabContentsObserver, observers_, TabContentsDestroyed());
258 273
259 set_delegate(NULL); 274 set_delegate(NULL);
260 } 275 }
261 276
262 // TODO(cbentzel): Either remove the debugging code, or rename to SetDelegate. 277 // TODO(cbentzel): Either remove the debugging code, or rename to SetDelegate.
263 void TabContents::set_delegate(TabContentsDelegate* delegate) { 278 void TabContents::set_delegate(TabContentsDelegate* delegate) {
264 if (delegate == delegate_) 279 if (delegate == delegate_)
265 return; 280 return;
266 if (delegate_) 281 if (delegate_)
(...skipping 1031 matching lines...) Expand 10 before | Expand all | Expand 10 after
1298 // page. 1313 // page.
1299 UpdateTargetURL(details.entry->page_id(), GURL()); 1314 UpdateTargetURL(details.entry->page_id(), GURL());
1300 } 1315 }
1301 1316
1302 if (!details.is_in_page) { 1317 if (!details.is_in_page) {
1303 // Once the main frame is navigated, we're no longer considered to have 1318 // Once the main frame is navigated, we're no longer considered to have
1304 // displayed insecure content. 1319 // displayed insecure content.
1305 displayed_insecure_content_ = false; 1320 displayed_insecure_content_ = false;
1306 } 1321 }
1307 1322
1323 DLOG(WARNING) << "DidNavigateMainFramePostCommit: " <<
1324 params.url << ", " << params.frame_id;
1325 content::FrameMapper& mapper = browser_context()->frame_mapper();
1326 mapper.UpdateFrame(browsing_instance_frame_,
1327 render_view_host()->process()->GetID(),
1328 render_view_host()->routing_id(),
1329 params.frame_id);
1330
1308 // Notify observers about navigation. 1331 // Notify observers about navigation.
1309 FOR_EACH_OBSERVER(TabContentsObserver, observers_, 1332 FOR_EACH_OBSERVER(TabContentsObserver, observers_,
1310 DidNavigateMainFrame(details, params)); 1333 DidNavigateMainFrame(details, params));
1311 } 1334 }
1312 1335
1313 void TabContents::DidNavigateAnyFramePostCommit( 1336 void TabContents::DidNavigateAnyFramePostCommit(
1314 RenderViewHost* render_view_host, 1337 RenderViewHost* render_view_host,
1315 const content::LoadCommittedDetails& details, 1338 const content::LoadCommittedDetails& details,
1316 const ViewHostMsg_FrameNavigate_Params& params) { 1339 const ViewHostMsg_FrameNavigate_Params& params) {
1317 // If we navigate, reset JavaScript state. This does nothing to prevent 1340 // If we navigate, reset JavaScript state. This does nothing to prevent
1318 // a malicious script from spamming messages, since the script could just 1341 // a malicious script from spamming messages, since the script could just
1319 // reload the page to stop blocking. 1342 // reload the page to stop blocking.
1320 if (dialog_creator_) { 1343 if (dialog_creator_) {
1321 dialog_creator_->ResetJavaScriptState(this); 1344 dialog_creator_->ResetJavaScriptState(this);
1322 dialog_creator_ = NULL; 1345 dialog_creator_ = NULL;
1323 } 1346 }
1324 1347
1348 // TODO(supersat): Logging for debugging purposes only.
1349 DLOG(WARNING) << "DidNavigateAnyFramePostCommit: "
1350 << "bifi = " << browsing_instance_frame_->id()
1351 << ", process id = " << render_view_host->process()->GetID()
1352 << ", rvh route = " << render_view_host->routing_id()
1353 << ", frame_id = " << params.frame_id << ", url = " <<
1354 params.url;
1325 // Notify observers about navigation. 1355 // Notify observers about navigation.
1326 FOR_EACH_OBSERVER(TabContentsObserver, observers_, 1356 FOR_EACH_OBSERVER(TabContentsObserver, observers_,
1327 DidNavigateAnyFrame(details, params)); 1357 DidNavigateAnyFrame(details, params));
1328 } 1358 }
1329 1359
1330 void TabContents::UpdateMaxPageIDIfNecessary(SiteInstance* site_instance, 1360 void TabContents::UpdateMaxPageIDIfNecessary(SiteInstance* site_instance,
1331 RenderViewHost* rvh) { 1361 RenderViewHost* rvh) {
1332 // If we are creating a RVH for a restored controller, then we might 1362 // If we are creating a RVH for a restored controller, then we might
1333 // have more page IDs than the SiteInstance's current max page ID. We must 1363 // have more page IDs than the SiteInstance's current max page ID. We must
1334 // make sure that the max page ID is larger than any restored page ID. 1364 // make sure that the max page ID is larger than any restored page ID.
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after
1736 int32 page_id) { 1766 int32 page_id) {
1737 content::NotificationService::current()->Notify( 1767 content::NotificationService::current()->Notify(
1738 content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME, 1768 content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME,
1739 content::Source<TabContents>(this), 1769 content::Source<TabContents>(this),
1740 content::Details<int>(&page_id)); 1770 content::Details<int>(&page_id));
1741 } 1771 }
1742 1772
1743 void TabContents::RequestOpenURL(const GURL& url, 1773 void TabContents::RequestOpenURL(const GURL& url,
1744 const GURL& referrer, 1774 const GURL& referrer,
1745 WindowOpenDisposition disposition, 1775 WindowOpenDisposition disposition,
1746 int64 source_frame_id) { 1776 int64 source_frame_id,
1777 int64 opener_browsing_instance_frame_id) {
1747 TabContents* new_contents = NULL; 1778 TabContents* new_contents = NULL;
1748 content::PageTransition transition_type = content::PAGE_TRANSITION_LINK; 1779 content::PageTransition transition_type = content::PAGE_TRANSITION_LINK;
1749 if (render_manager_.web_ui()) { 1780 if (render_manager_.web_ui()) {
1750 // When we're a Web UI, it will provide a page transition type for us (this 1781 // When we're a Web UI, it will provide a page transition type for us (this
1751 // is so the new tab page can specify AUTO_BOOKMARK for automatically 1782 // is so the new tab page can specify AUTO_BOOKMARK for automatically
1752 // generated suggestions). 1783 // generated suggestions).
1753 // 1784 //
1754 // Note also that we hide the referrer for Web UI pages. We don't really 1785 // Note also that we hide the referrer for Web UI pages. We don't really
1755 // want web sites to see a referrer of "chrome://blah" (and some 1786 // want web sites to see a referrer of "chrome://blah" (and some
1756 // chrome: URLs might have search terms or other stuff we don't want to 1787 // chrome: URLs might have search terms or other stuff we don't want to
1757 // send to the site), so we send no referrer. 1788 // send to the site), so we send no referrer.
1758 new_contents = OpenURL(url, GURL(), disposition, 1789 new_contents = OpenURL(url, GURL(), disposition,
1759 render_manager_.web_ui()->link_transition_type()); 1790 render_manager_.web_ui()->link_transition_type());
1760 transition_type = render_manager_.web_ui()->link_transition_type(); 1791 transition_type = render_manager_.web_ui()->link_transition_type();
1761 } else { 1792 } else {
1762 new_contents = OpenURL(OpenURLParams( 1793 new_contents = OpenURL(OpenURLParams(
1763 url, referrer, disposition, content::PAGE_TRANSITION_LINK, 1794 url, referrer, disposition, content::PAGE_TRANSITION_LINK,
1764 true /* is_renderer_initiated */)); 1795 true /* is_renderer_initiated */, opener_browsing_instance_frame_id));
1765 } 1796 }
1766 if (new_contents) { 1797 if (new_contents) {
1767 // Notify observers. 1798 // Notify observers.
1768 FOR_EACH_OBSERVER(TabContentsObserver, observers_, 1799 FOR_EACH_OBSERVER(TabContentsObserver, observers_,
1769 DidOpenRequestedURL(new_contents, 1800 DidOpenRequestedURL(new_contents,
1770 url, 1801 url,
1771 referrer, 1802 referrer,
1772 disposition, 1803 disposition,
1773 transition_type, 1804 transition_type,
1774 source_frame_id)); 1805 source_frame_id));
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
2051 RenderWidgetHostView* rwh_view = view()->CreateViewForWidget(rvh); 2082 RenderWidgetHostView* rwh_view = view()->CreateViewForWidget(rvh);
2052 // Can be NULL during tests. 2083 // Can be NULL during tests.
2053 if (rwh_view) 2084 if (rwh_view)
2054 rwh_view->SetSize(view()->GetContainerSize()); 2085 rwh_view->SetSize(view()->GetContainerSize());
2055 } 2086 }
2056 2087
2057 bool TabContents::GotResponseToLockMouseRequest(bool allowed) { 2088 bool TabContents::GotResponseToLockMouseRequest(bool allowed) {
2058 return render_view_host() ? 2089 return render_view_host() ?
2059 render_view_host()->GotResponseToLockMouseRequest(allowed) : false; 2090 render_view_host()->GotResponseToLockMouseRequest(allowed) : false;
2060 } 2091 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698