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

Side by Side Diff: content/browser/web_contents/web_contents_impl.cc

Issue 11231077: Move a bunch more code into the content namespace. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 2 months 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/web_contents/web_contents_impl.h" 5 #include "content/browser/web_contents/web_contents_impl.h"
6 6
7 #include <utility> 7 #include <utility>
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"
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 // - Once the onunload handler is finished, a SwapOut_ACK message is sent to 128 // - Once the onunload handler is finished, a SwapOut_ACK message is sent to
129 // the ResourceDispatcherHost, who unpauses the response. Data is then sent 129 // the ResourceDispatcherHost, who unpauses the response. Data is then sent
130 // to the pending RVH. 130 // to the pending RVH.
131 // - The pending renderer sends a FrameNavigate message that invokes the 131 // - The pending renderer sends a FrameNavigate message that invokes the
132 // DidNavigate method. This replaces the current RVH with the 132 // DidNavigate method. This replaces the current RVH with the
133 // pending RVH. 133 // pending RVH.
134 // - The previous renderer is kept swapped out in RenderViewHostManager in case 134 // - The previous renderer is kept swapped out in RenderViewHostManager in case
135 // the user goes back. The process only stays live if another tab is using 135 // the user goes back. The process only stays live if another tab is using
136 // it, but if so, the existing frame relationships will be maintained. 136 // it, but if so, the existing frame relationships will be maintained.
137 137
138 using content::BrowserContext;
139 using content::DevToolsAgentHost;
140 using content::DevToolsAgentHostRegistry;
141 using content::DevToolsManagerImpl;
142 using content::DownloadItem;
143 using content::DownloadManager;
144 using content::DownloadUrlParameters;
145 using content::GlobalRequestID;
146 using content::HostZoomMap;
147 using content::InterstitialPage;
148 using content::LoadNotificationDetails;
149 using content::NativeWebKeyboardEvent;
150 using content::NavigationController;
151 using content::NavigationEntry;
152 using content::NavigationEntryImpl;
153 using content::OpenURLParams;
154 using content::RenderViewHost;
155 using content::RenderViewHostDelegate;
156 using content::RenderViewHostDelegateView;
157 using content::RenderViewHostImpl;
158 using content::RenderWidgetHost;
159 using content::RenderWidgetHostImpl;
160 using content::RenderWidgetHostView;
161 using content::RenderWidgetHostViewPort;
162 using content::ResourceDispatcherHostImpl;
163 using content::SSLStatus;
164 using content::SessionStorageNamespace;
165 using content::SiteInstance;
166 using content::UserMetricsAction;
167 using content::WebContents;
168 using content::WebContentsDelegate;
169 using content::WebContentsObserver;
170 using content::WebUI;
171 using content::WebUIController;
172 using content::WebUIControllerFactory;
173 using webkit_glue::WebPreferences; 138 using webkit_glue::WebPreferences;
174 139
140 namespace content {
175 namespace { 141 namespace {
176 142
177 // Amount of time we wait between when a key event is received and the renderer 143 // Amount of time we wait between when a key event is received and the renderer
178 // is queried for its state and pushed to the NavigationEntry. 144 // is queried for its state and pushed to the NavigationEntry.
179 const int kQueryStateDelay = 5000; 145 const int kQueryStateDelay = 5000;
180 146
181 const int kSyncWaitDelay = 40; 147 const int kSyncWaitDelay = 40;
182 148
183 const char kDotGoogleDotCom[] = ".google.com"; 149 const char kDotGoogleDotCom[] = ".google.com";
184 150
185 #if defined(OS_WIN) 151 #if defined(OS_WIN)
186 152
187 BOOL CALLBACK InvalidateWindow(HWND hwnd, LPARAM lparam) { 153 BOOL CALLBACK InvalidateWindow(HWND hwnd, LPARAM lparam) {
188 // Note: erase is required to properly paint some widgets borders. This can 154 // Note: erase is required to properly paint some widgets borders. This can
189 // be seen with textfields. 155 // be seen with textfields.
190 InvalidateRect(hwnd, NULL, TRUE); 156 InvalidateRect(hwnd, NULL, TRUE);
191 return TRUE; 157 return TRUE;
192 } 158 }
193 #endif 159 #endif
194 160
195 ViewMsg_Navigate_Type::Value GetNavigationType( 161 ViewMsg_Navigate_Type::Value GetNavigationType(
196 content::BrowserContext* browser_context, const NavigationEntryImpl& entry, 162 BrowserContext* browser_context, const NavigationEntryImpl& entry,
197 NavigationController::ReloadType reload_type) { 163 NavigationController::ReloadType reload_type) {
198 switch (reload_type) { 164 switch (reload_type) {
199 case NavigationControllerImpl::RELOAD: 165 case NavigationControllerImpl::RELOAD:
200 return ViewMsg_Navigate_Type::RELOAD; 166 return ViewMsg_Navigate_Type::RELOAD;
201 case NavigationControllerImpl::RELOAD_IGNORING_CACHE: 167 case NavigationControllerImpl::RELOAD_IGNORING_CACHE:
202 return ViewMsg_Navigate_Type::RELOAD_IGNORING_CACHE; 168 return ViewMsg_Navigate_Type::RELOAD_IGNORING_CACHE;
203 case NavigationControllerImpl::RELOAD_ORIGINAL_REQUEST_URL: 169 case NavigationControllerImpl::RELOAD_ORIGINAL_REQUEST_URL:
204 return ViewMsg_Navigate_Type::RELOAD_ORIGINAL_REQUEST_URL; 170 return ViewMsg_Navigate_Type::RELOAD_ORIGINAL_REQUEST_URL;
205 case NavigationControllerImpl::NO_RELOAD: 171 case NavigationControllerImpl::NO_RELOAD:
206 break; // Fall through to rest of function. 172 break; // Fall through to rest of function.
207 } 173 }
208 174
209 // |RenderViewImpl::PopulateStateFromPendingNavigationParams| differentiates 175 // |RenderViewImpl::PopulateStateFromPendingNavigationParams| differentiates
210 // between |RESTORE_WITH_POST| and |RESTORE|. 176 // between |RESTORE_WITH_POST| and |RESTORE|.
211 if (entry.restore_type() == 177 if (entry.restore_type() ==
212 NavigationEntryImpl::RESTORE_LAST_SESSION_EXITED_CLEANLY) { 178 NavigationEntryImpl::RESTORE_LAST_SESSION_EXITED_CLEANLY) {
213 if (entry.GetHasPostData()) 179 if (entry.GetHasPostData())
214 return ViewMsg_Navigate_Type::RESTORE_WITH_POST; 180 return ViewMsg_Navigate_Type::RESTORE_WITH_POST;
215 return ViewMsg_Navigate_Type::RESTORE; 181 return ViewMsg_Navigate_Type::RESTORE;
216 } 182 }
217 183
218 return ViewMsg_Navigate_Type::NORMAL; 184 return ViewMsg_Navigate_Type::NORMAL;
219 } 185 }
220 186
221 void MakeNavigateParams(const NavigationEntryImpl& entry, 187 void MakeNavigateParams(const NavigationEntryImpl& entry,
222 const NavigationControllerImpl& controller, 188 const NavigationControllerImpl& controller,
223 content::WebContentsDelegate* delegate, 189 WebContentsDelegate* delegate,
224 NavigationController::ReloadType reload_type, 190 NavigationController::ReloadType reload_type,
225 const std::string& embedder_channel_name, 191 const std::string& embedder_channel_name,
226 int embedder_container_id, 192 int embedder_container_id,
227 ViewMsg_Navigate_Params* params) { 193 ViewMsg_Navigate_Params* params) {
228 params->page_id = entry.GetPageID(); 194 params->page_id = entry.GetPageID();
229 params->pending_history_list_offset = controller.GetIndexOfEntry(&entry); 195 params->pending_history_list_offset = controller.GetIndexOfEntry(&entry);
230 params->current_history_list_offset = controller.GetLastCommittedEntryIndex(); 196 params->current_history_list_offset = controller.GetLastCommittedEntryIndex();
231 params->current_history_list_length = controller.GetEntryCount(); 197 params->current_history_list_length = controller.GetEntryCount();
232 if (!entry.GetBaseURLForDataURL().is_empty()) { 198 if (!entry.GetBaseURLForDataURL().is_empty()) {
233 params->base_url_for_data_url = entry.GetBaseURLForDataURL(); 199 params->base_url_for_data_url = entry.GetBaseURLForDataURL();
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 std::string string_value = command_line.GetSwitchValueASCII(switch_string); 248 std::string string_value = command_line.GetSwitchValueASCII(switch_string);
283 int int_value; 249 int int_value;
284 if (base::StringToInt(string_value, &int_value)) 250 if (base::StringToInt(string_value, &int_value))
285 return std::max(min_value, int_value); 251 return std::max(min_value, int_value);
286 else 252 else
287 return min_value; 253 return min_value;
288 } 254 }
289 255
290 } // namespace 256 } // namespace
291 257
292 namespace content {
293
294 WebContents* WebContents::Create( 258 WebContents* WebContents::Create(
295 BrowserContext* browser_context, 259 BrowserContext* browser_context,
296 SiteInstance* site_instance, 260 SiteInstance* site_instance,
297 int routing_id, 261 int routing_id,
298 const WebContents* base_web_contents) { 262 const WebContents* base_web_contents) {
299 return WebContentsImpl::Create( 263 return WebContentsImpl::Create(
300 browser_context, site_instance, routing_id, 264 browser_context, site_instance, routing_id,
301 static_cast<const WebContentsImpl*>(base_web_contents)); 265 static_cast<const WebContentsImpl*>(base_web_contents));
302 } 266 }
303 267
(...skipping 15 matching lines...) Expand all
319 283
320 new_contents->Init(browser_context, site_instance, routing_id, 284 new_contents->Init(browser_context, site_instance, routing_id,
321 static_cast<const WebContentsImpl*>(base_web_contents)); 285 static_cast<const WebContentsImpl*>(base_web_contents));
322 return new_contents; 286 return new_contents;
323 } 287 }
324 288
325 WebContents* WebContents::FromRenderViewHost(const RenderViewHost* rvh) { 289 WebContents* WebContents::FromRenderViewHost(const RenderViewHost* rvh) {
326 return rvh->GetDelegate()->GetAsWebContents(); 290 return rvh->GetDelegate()->GetAsWebContents();
327 } 291 }
328 292
329 }
330
331 // WebContentsImpl ------------------------------------------------------------- 293 // WebContentsImpl -------------------------------------------------------------
332 294
333 WebContentsImpl::WebContentsImpl( 295 WebContentsImpl::WebContentsImpl(
334 content::BrowserContext* browser_context, 296 BrowserContext* browser_context,
335 WebContentsImpl* opener) 297 WebContentsImpl* opener)
336 : delegate_(NULL), 298 : delegate_(NULL),
337 ALLOW_THIS_IN_INITIALIZER_LIST(controller_(this, browser_context)), 299 ALLOW_THIS_IN_INITIALIZER_LIST(controller_(this, browser_context)),
338 render_view_host_delegate_view_(NULL), 300 render_view_host_delegate_view_(NULL),
339 opener_(opener), 301 opener_(opener),
340 ALLOW_THIS_IN_INITIALIZER_LIST(render_manager_(this, this, this)), 302 ALLOW_THIS_IN_INITIALIZER_LIST(render_manager_(this, this, this)),
341 is_loading_(false), 303 is_loading_(false),
342 crashed_status_(base::TERMINATION_STATUS_STILL_RUNNING), 304 crashed_status_(base::TERMINATION_STATUS_STILL_RUNNING),
343 crashed_error_code_(0), 305 crashed_error_code_(0),
344 waiting_for_response_(false), 306 waiting_for_response_(false),
345 load_state_(net::LOAD_STATE_IDLE, string16()), 307 load_state_(net::LOAD_STATE_IDLE, string16()),
346 upload_size_(0), 308 upload_size_(0),
347 upload_position_(0), 309 upload_position_(0),
348 displayed_insecure_content_(false), 310 displayed_insecure_content_(false),
349 capturing_contents_(false), 311 capturing_contents_(false),
350 is_being_destroyed_(false), 312 is_being_destroyed_(false),
351 notify_disconnection_(false), 313 notify_disconnection_(false),
352 dialog_creator_(NULL), 314 dialog_creator_(NULL),
353 #if defined(OS_WIN) 315 #if defined(OS_WIN)
354 message_box_active_(CreateEvent(NULL, TRUE, FALSE, NULL)), 316 message_box_active_(CreateEvent(NULL, TRUE, FALSE, NULL)),
355 #endif 317 #endif
356 is_showing_before_unload_dialog_(false), 318 is_showing_before_unload_dialog_(false),
357 opener_web_ui_type_(WebUI::kNoWebUI), 319 opener_web_ui_type_(WebUI::kNoWebUI),
358 closed_by_user_gesture_(false), 320 closed_by_user_gesture_(false),
359 minimum_zoom_percent_( 321 minimum_zoom_percent_(static_cast<int>(kMinimumZoomFactor * 100)),
360 static_cast<int>(content::kMinimumZoomFactor * 100)), 322 maximum_zoom_percent_(static_cast<int>(kMaximumZoomFactor * 100)),
361 maximum_zoom_percent_(
362 static_cast<int>(content::kMaximumZoomFactor * 100)),
363 temporary_zoom_settings_(false), 323 temporary_zoom_settings_(false),
364 content_restrictions_(0), 324 content_restrictions_(0),
365 color_chooser_(NULL) { 325 color_chooser_(NULL) {
366 } 326 }
367 327
368 WebContentsImpl::~WebContentsImpl() { 328 WebContentsImpl::~WebContentsImpl() {
369 is_being_destroyed_ = true; 329 is_being_destroyed_ = true;
370 330
371 for (std::set<RenderWidgetHostImpl*>::iterator iter = 331 for (std::set<RenderWidgetHostImpl*>::iterator iter =
372 created_widgets_.begin(); iter != created_widgets_.end(); ++iter) { 332 created_widgets_.begin(); iter != created_widgets_.end(); ++iter) {
373 (*iter)->DetachDelegate(); 333 (*iter)->DetachDelegate();
374 } 334 }
375 created_widgets_.clear(); 335 created_widgets_.clear();
376 336
377 // Clear out any JavaScript state. 337 // Clear out any JavaScript state.
378 if (dialog_creator_) 338 if (dialog_creator_)
379 dialog_creator_->ResetJavaScriptState(this); 339 dialog_creator_->ResetJavaScriptState(this);
380 340
381 if (color_chooser_) 341 if (color_chooser_)
382 color_chooser_->End(); 342 color_chooser_->End();
383 343
384 NotifyDisconnected(); 344 NotifyDisconnected();
385 345
386 // Notify any observer that have a reference on this WebContents. 346 // Notify any observer that have a reference on this WebContents.
387 content::NotificationService::current()->Notify( 347 NotificationService::current()->Notify(
388 content::NOTIFICATION_WEB_CONTENTS_DESTROYED, 348 NOTIFICATION_WEB_CONTENTS_DESTROYED,
389 content::Source<WebContents>(this), 349 Source<WebContents>(this),
390 content::NotificationService::NoDetails()); 350 NotificationService::NoDetails());
391 351
392 // TODO(brettw) this should be moved to the view. 352 // TODO(brettw) this should be moved to the view.
393 #if defined(OS_WIN) && !defined(USE_AURA) 353 #if defined(OS_WIN) && !defined(USE_AURA)
394 // If we still have a window handle, destroy it. GetNativeView can return 354 // If we still have a window handle, destroy it. GetNativeView can return
395 // NULL if this contents was part of a window that closed. 355 // NULL if this contents was part of a window that closed.
396 if (GetNativeView()) { 356 if (GetNativeView()) {
397 RenderViewHost* host = GetRenderViewHost(); 357 RenderViewHost* host = GetRenderViewHost();
398 if (host && host->GetView()) 358 if (host && host->GetView())
399 RenderWidgetHostViewPort::FromRWHV(host->GetView())->WillWmDestroy(); 359 RenderWidgetHostViewPort::FromRWHV(host->GetView())->WillWmDestroy();
400 } 360 }
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
453 browser_context, 413 browser_context,
454 guest_site_instance, 414 guest_site_instance,
455 MSG_ROUTING_NONE, 415 MSG_ROUTING_NONE,
456 NULL); // base WebContents 416 NULL); // base WebContents
457 WebContentsImpl* new_contents_impl = 417 WebContentsImpl* new_contents_impl =
458 static_cast<WebContentsImpl*>(new_contents); 418 static_cast<WebContentsImpl*>(new_contents);
459 419
460 // This makes |new_contents| act as a guest. 420 // This makes |new_contents| act as a guest.
461 // For more info, see comment above class BrowserPluginGuest. 421 // For more info, see comment above class BrowserPluginGuest.
462 new_contents_impl->browser_plugin_guest_.reset( 422 new_contents_impl->browser_plugin_guest_.reset(
463 content::BrowserPluginGuest::Create( 423 BrowserPluginGuest::Create(
464 guest_instance_id, 424 guest_instance_id,
465 new_contents_impl, 425 new_contents_impl,
466 new_contents_impl->GetRenderViewHost())); 426 new_contents_impl->GetRenderViewHost()));
467 return new_contents; 427 return new_contents;
468 } 428 }
469 429
470 WebPreferences WebContentsImpl::GetWebkitPrefs(RenderViewHost* rvh, 430 WebPreferences WebContentsImpl::GetWebkitPrefs(RenderViewHost* rvh,
471 const GURL& url) { 431 const GURL& url) {
472 WebPreferences prefs; 432 WebPreferences prefs;
473 433
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
600 if (command_line.HasSwitch(switches::kDisableSmoothScrolling)) 560 if (command_line.HasSwitch(switches::kDisableSmoothScrolling))
601 prefs.enable_scroll_animator = false; 561 prefs.enable_scroll_animator = false;
602 562
603 prefs.visual_word_movement_enabled = 563 prefs.visual_word_movement_enabled =
604 command_line.HasSwitch(switches::kEnableVisualWordMovement); 564 command_line.HasSwitch(switches::kEnableVisualWordMovement);
605 565
606 { // Certain GPU features might have been blacklisted. 566 { // Certain GPU features might have been blacklisted.
607 GpuDataManagerImpl* gpu_data_manager = GpuDataManagerImpl::GetInstance(); 567 GpuDataManagerImpl* gpu_data_manager = GpuDataManagerImpl::GetInstance();
608 DCHECK(gpu_data_manager); 568 DCHECK(gpu_data_manager);
609 uint32 blacklist_type = gpu_data_manager->GetBlacklistedFeatures(); 569 uint32 blacklist_type = gpu_data_manager->GetBlacklistedFeatures();
610 if (blacklist_type & content::GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING) 570 if (blacklist_type & GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING)
611 prefs.accelerated_compositing_enabled = false; 571 prefs.accelerated_compositing_enabled = false;
612 if (blacklist_type & content::GPU_FEATURE_TYPE_WEBGL) 572 if (blacklist_type & GPU_FEATURE_TYPE_WEBGL)
613 prefs.experimental_webgl_enabled = false; 573 prefs.experimental_webgl_enabled = false;
614 if (blacklist_type & content::GPU_FEATURE_TYPE_FLASH3D) 574 if (blacklist_type & GPU_FEATURE_TYPE_FLASH3D)
615 prefs.flash_3d_enabled = false; 575 prefs.flash_3d_enabled = false;
616 if (blacklist_type & content::GPU_FEATURE_TYPE_FLASH_STAGE3D) 576 if (blacklist_type & GPU_FEATURE_TYPE_FLASH_STAGE3D)
617 prefs.flash_stage3d_enabled = false; 577 prefs.flash_stage3d_enabled = false;
618 if (blacklist_type & content::GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS) 578 if (blacklist_type & GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS)
619 prefs.accelerated_2d_canvas_enabled = false; 579 prefs.accelerated_2d_canvas_enabled = false;
620 if (blacklist_type & content::GPU_FEATURE_TYPE_MULTISAMPLING) 580 if (blacklist_type & GPU_FEATURE_TYPE_MULTISAMPLING)
621 prefs.gl_multisampling_enabled = false; 581 prefs.gl_multisampling_enabled = false;
622 if (blacklist_type & content::GPU_FEATURE_TYPE_3D_CSS) { 582 if (blacklist_type & GPU_FEATURE_TYPE_3D_CSS) {
623 prefs.accelerated_layers_enabled = false; 583 prefs.accelerated_layers_enabled = false;
624 prefs.accelerated_animation_enabled = false; 584 prefs.accelerated_animation_enabled = false;
625 } 585 }
626 if (blacklist_type & content::GPU_FEATURE_TYPE_ACCELERATED_VIDEO) 586 if (blacklist_type & GPU_FEATURE_TYPE_ACCELERATED_VIDEO)
627 prefs.accelerated_video_enabled = false; 587 prefs.accelerated_video_enabled = false;
628 588
629 // Accelerated video and animation are slower than regular when using a 589 // Accelerated video and animation are slower than regular when using a
630 // software 3d rasterizer. 3D CSS may also be too slow to be worthwhile. 590 // software 3d rasterizer. 3D CSS may also be too slow to be worthwhile.
631 if (gpu_data_manager->ShouldUseSoftwareRendering()) { 591 if (gpu_data_manager->ShouldUseSoftwareRendering()) {
632 prefs.accelerated_video_enabled = false; 592 prefs.accelerated_video_enabled = false;
633 prefs.accelerated_animation_enabled = false; 593 prefs.accelerated_animation_enabled = false;
634 prefs.accelerated_layers_enabled = false; 594 prefs.accelerated_layers_enabled = false;
635 prefs.accelerated_plugins_enabled = false; 595 prefs.accelerated_plugins_enabled = false;
636 } 596 }
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
679 switches::kDisableFixedPositionCreatesStackingContext); 639 switches::kDisableFixedPositionCreatesStackingContext);
680 640
681 prefs.gesture_tap_highlight_enabled = command_line.HasSwitch( 641 prefs.gesture_tap_highlight_enabled = command_line.HasSwitch(
682 switches::kEnableGestureTapHighlight); 642 switches::kEnableGestureTapHighlight);
683 643
684 prefs.number_of_cpu_cores = base::SysInfo::NumberOfProcessors(); 644 prefs.number_of_cpu_cores = base::SysInfo::NumberOfProcessors();
685 645
686 prefs.apply_page_scale_factor_in_compositor = 646 prefs.apply_page_scale_factor_in_compositor =
687 command_line.HasSwitch(cc::switches::kEnablePinchInCompositor); 647 command_line.HasSwitch(cc::switches::kEnablePinchInCompositor);
688 648
689 content::GetContentClient()->browser()->OverrideWebkitPrefs(rvh, url, &prefs); 649 GetContentClient()->browser()->OverrideWebkitPrefs(rvh, url, &prefs);
690 650
691 // Disable compositing in guests until we have compositing path implemented 651 // Disable compositing in guests until we have compositing path implemented
692 // for guests. 652 // for guests.
693 if (rvh->GetProcess()->IsGuest()) { 653 if (rvh->GetProcess()->IsGuest()) {
694 prefs.force_compositing_mode = false; 654 prefs.force_compositing_mode = false;
695 prefs.accelerated_compositing_enabled = false; 655 prefs.accelerated_compositing_enabled = false;
696 } 656 }
697 657
698 return prefs; 658 return prefs;
699 } 659 }
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
760 IPC_MESSAGE_HANDLER(ViewHostMsg_WebUISend, OnWebUISend) 720 IPC_MESSAGE_HANDLER(ViewHostMsg_WebUISend, OnWebUISend)
761 IPC_MESSAGE_HANDLER(ViewHostMsg_RequestPpapiBrokerPermission, 721 IPC_MESSAGE_HANDLER(ViewHostMsg_RequestPpapiBrokerPermission,
762 OnRequestPpapiBrokerPermission) 722 OnRequestPpapiBrokerPermission)
763 IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_CreateGuest, 723 IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_CreateGuest,
764 OnBrowserPluginCreateGuest) 724 OnBrowserPluginCreateGuest)
765 IPC_MESSAGE_UNHANDLED(handled = false) 725 IPC_MESSAGE_UNHANDLED(handled = false)
766 IPC_END_MESSAGE_MAP_EX() 726 IPC_END_MESSAGE_MAP_EX()
767 message_source_ = NULL; 727 message_source_ = NULL;
768 728
769 if (!message_is_ok) { 729 if (!message_is_ok) {
770 content::RecordAction(UserMetricsAction("BadMessageTerminate_RVD")); 730 RecordAction(UserMetricsAction("BadMessageTerminate_RVD"));
771 GetRenderProcessHost()->ReceivedBadMessage(); 731 GetRenderProcessHost()->ReceivedBadMessage();
772 } 732 }
773 733
774 return handled; 734 return handled;
775 } 735 }
776 736
777 void WebContentsImpl::RunFileChooser( 737 void WebContentsImpl::RunFileChooser(
778 RenderViewHost* render_view_host, 738 RenderViewHost* render_view_host,
779 const content::FileChooserParams& params) { 739 const FileChooserParams& params) {
780 if (delegate_) 740 if (delegate_)
781 delegate_->RunFileChooser(this, params); 741 delegate_->RunFileChooser(this, params);
782 } 742 }
783 743
784 NavigationControllerImpl& WebContentsImpl::GetController() { 744 NavigationControllerImpl& WebContentsImpl::GetController() {
785 return controller_; 745 return controller_;
786 } 746 }
787 747
788 const NavigationControllerImpl& WebContentsImpl::GetController() const { 748 const NavigationControllerImpl& WebContentsImpl::GetController() const {
789 return controller_; 749 return controller_;
790 } 750 }
791 751
792 content::BrowserContext* WebContentsImpl::GetBrowserContext() const { 752 BrowserContext* WebContentsImpl::GetBrowserContext() const {
793 return controller_.GetBrowserContext(); 753 return controller_.GetBrowserContext();
794 } 754 }
795 755
796 const GURL& WebContentsImpl::GetURL() const { 756 const GURL& WebContentsImpl::GetURL() const {
797 // We may not have a navigation entry yet 757 // We may not have a navigation entry yet
798 NavigationEntry* entry = controller_.GetActiveEntry(); 758 NavigationEntry* entry = controller_.GetActiveEntry();
799 return entry ? entry->GetVirtualURL() : GURL::EmptyGURL(); 759 return entry ? entry->GetVirtualURL() : GURL::EmptyGURL();
800 } 760 }
801 761
802 content::WebContentsDelegate* WebContentsImpl::GetDelegate() { 762 WebContentsDelegate* WebContentsImpl::GetDelegate() {
803 return delegate_; 763 return delegate_;
804 } 764 }
805 765
806 void WebContentsImpl::SetDelegate(content::WebContentsDelegate* delegate) { 766 void WebContentsImpl::SetDelegate(WebContentsDelegate* delegate) {
807 // TODO(cbentzel): remove this debugging code? 767 // TODO(cbentzel): remove this debugging code?
808 if (delegate == delegate_) 768 if (delegate == delegate_)
809 return; 769 return;
810 if (delegate_) 770 if (delegate_)
811 delegate_->Detach(this); 771 delegate_->Detach(this);
812 delegate_ = delegate; 772 delegate_ = delegate;
813 if (delegate_) 773 if (delegate_)
814 delegate_->Attach(this); 774 delegate_->Attach(this);
815 } 775 }
816 776
817 content::RenderProcessHost* WebContentsImpl::GetRenderProcessHost() const { 777 RenderProcessHost* WebContentsImpl::GetRenderProcessHost() const {
818 RenderViewHostImpl* host = render_manager_.current_host(); 778 RenderViewHostImpl* host = render_manager_.current_host();
819 return host ? host->GetProcess() : NULL; 779 return host ? host->GetProcess() : NULL;
820 } 780 }
821 781
822 RenderViewHost* WebContentsImpl::GetRenderViewHost() const { 782 RenderViewHost* WebContentsImpl::GetRenderViewHost() const {
823 return render_manager_.current_host(); 783 return render_manager_.current_host();
824 } 784 }
825 785
826 int WebContentsImpl::GetRoutingID() const { 786 int WebContentsImpl::GetRoutingID() const {
827 if (!GetRenderViewHost()) 787 if (!GetRenderViewHost())
828 return MSG_ROUTING_NONE; 788 return MSG_ROUTING_NONE;
829 789
830 return GetRenderViewHost()->GetRoutingID(); 790 return GetRenderViewHost()->GetRoutingID();
831 } 791 }
832 792
833 RenderWidgetHostView* WebContentsImpl::GetRenderWidgetHostView() const { 793 RenderWidgetHostView* WebContentsImpl::GetRenderWidgetHostView() const {
834 return render_manager_.GetRenderWidgetHostView(); 794 return render_manager_.GetRenderWidgetHostView();
835 } 795 }
836 796
837 content::WebContentsView* WebContentsImpl::GetView() const { 797 WebContentsView* WebContentsImpl::GetView() const {
838 return view_.get(); 798 return view_.get();
839 } 799 }
840 800
841 content::WebUI* WebContentsImpl::CreateWebUI(const GURL& url) { 801 WebUI* WebContentsImpl::CreateWebUI(const GURL& url) {
842 WebUIControllerFactory* factory = 802 WebUIControllerFactory* factory =
843 content::GetContentClient()->browser()->GetWebUIControllerFactory(); 803 GetContentClient()->browser()->GetWebUIControllerFactory();
844 if (!factory) 804 if (!factory)
845 return NULL; 805 return NULL;
846 WebUIImpl* web_ui = new WebUIImpl(this); 806 WebUIImpl* web_ui = new WebUIImpl(this);
847 WebUIController* controller = 807 WebUIController* controller =
848 factory->CreateWebUIControllerForURL(web_ui, url); 808 factory->CreateWebUIControllerForURL(web_ui, url);
849 if (controller) { 809 if (controller) {
850 web_ui->SetController(controller); 810 web_ui->SetController(controller);
851 return web_ui; 811 return web_ui;
852 } 812 }
853 813
854 delete web_ui; 814 delete web_ui;
855 return NULL; 815 return NULL;
856 } 816 }
857 817
858 content::WebUI* WebContentsImpl::GetWebUI() const { 818 WebUI* WebContentsImpl::GetWebUI() const {
859 return render_manager_.web_ui() ? render_manager_.web_ui() 819 return render_manager_.web_ui() ? render_manager_.web_ui()
860 : render_manager_.pending_web_ui(); 820 : render_manager_.pending_web_ui();
861 } 821 }
862 822
863 content::WebUI* WebContentsImpl::GetCommittedWebUI() const { 823 WebUI* WebContentsImpl::GetCommittedWebUI() const {
864 return render_manager_.web_ui(); 824 return render_manager_.web_ui();
865 } 825 }
866 826
867 void WebContentsImpl::SetUserAgentOverride(const std::string& override) { 827 void WebContentsImpl::SetUserAgentOverride(const std::string& override) {
868 if (GetUserAgentOverride() == override) 828 if (GetUserAgentOverride() == override)
869 return; 829 return;
870 830
871 renderer_preferences_.user_agent_override = override; 831 renderer_preferences_.user_agent_override = override;
872 832
873 // Send the new override string to the renderer. 833 // Send the new override string to the renderer.
(...skipping 13 matching lines...) Expand all
887 847
888 const std::string& WebContentsImpl::GetUserAgentOverride() const { 848 const std::string& WebContentsImpl::GetUserAgentOverride() const {
889 return renderer_preferences_.user_agent_override; 849 return renderer_preferences_.user_agent_override;
890 } 850 }
891 851
892 const string16& WebContentsImpl::GetTitle() const { 852 const string16& WebContentsImpl::GetTitle() const {
893 // Transient entries take precedence. They are used for interstitial pages 853 // Transient entries take precedence. They are used for interstitial pages
894 // that are shown on top of existing pages. 854 // that are shown on top of existing pages.
895 NavigationEntry* entry = controller_.GetTransientEntry(); 855 NavigationEntry* entry = controller_.GetTransientEntry();
896 std::string accept_languages = 856 std::string accept_languages =
897 content::GetContentClient()->browser()->GetAcceptLangs( 857 GetContentClient()->browser()->GetAcceptLangs(
898 GetBrowserContext()); 858 GetBrowserContext());
899 if (entry) { 859 if (entry) {
900 return entry->GetTitleForDisplay(accept_languages); 860 return entry->GetTitleForDisplay(accept_languages);
901 } 861 }
902 WebUI* our_web_ui = render_manager_.pending_web_ui() ? 862 WebUI* our_web_ui = render_manager_.pending_web_ui() ?
903 render_manager_.pending_web_ui() : render_manager_.web_ui(); 863 render_manager_.pending_web_ui() : render_manager_.web_ui();
904 if (our_web_ui) { 864 if (our_web_ui) {
905 // Don't override the title in view source mode. 865 // Don't override the title in view source mode.
906 entry = controller_.GetActiveEntry(); 866 entry = controller_.GetActiveEntry();
907 if (!(entry && entry->IsViewSourceMode())) { 867 if (!(entry && entry->IsViewSourceMode())) {
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
1005 crashed_status_ == base::TERMINATION_STATUS_PROCESS_WAS_KILLED); 965 crashed_status_ == base::TERMINATION_STATUS_PROCESS_WAS_KILLED);
1006 } 966 }
1007 967
1008 void WebContentsImpl::SetIsCrashed(base::TerminationStatus status, 968 void WebContentsImpl::SetIsCrashed(base::TerminationStatus status,
1009 int error_code) { 969 int error_code) {
1010 if (status == crashed_status_) 970 if (status == crashed_status_)
1011 return; 971 return;
1012 972
1013 crashed_status_ = status; 973 crashed_status_ = status;
1014 crashed_error_code_ = error_code; 974 crashed_error_code_ = error_code;
1015 NotifyNavigationStateChanged(content::INVALIDATE_TYPE_TAB); 975 NotifyNavigationStateChanged(INVALIDATE_TYPE_TAB);
1016 } 976 }
1017 977
1018 base::TerminationStatus WebContentsImpl::GetCrashedStatus() const { 978 base::TerminationStatus WebContentsImpl::GetCrashedStatus() const {
1019 return crashed_status_; 979 return crashed_status_;
1020 } 980 }
1021 981
1022 bool WebContentsImpl::IsBeingDestroyed() const { 982 bool WebContentsImpl::IsBeingDestroyed() const {
1023 return is_being_destroyed_; 983 return is_being_destroyed_;
1024 } 984 }
1025 985
(...skipping 23 matching lines...) Expand all
1049 1009
1050 // The resize rect might have changed while this was inactive -- send the new 1010 // The resize rect might have changed while this was inactive -- send the new
1051 // one to make sure it's up to date. 1011 // one to make sure it's up to date.
1052 RenderViewHostImpl* rvh = 1012 RenderViewHostImpl* rvh =
1053 static_cast<RenderViewHostImpl*>(GetRenderViewHost()); 1013 static_cast<RenderViewHostImpl*>(GetRenderViewHost());
1054 if (rvh) { 1014 if (rvh) {
1055 rvh->ResizeRectChanged(GetRootWindowResizerRect()); 1015 rvh->ResizeRectChanged(GetRootWindowResizerRect());
1056 } 1016 }
1057 1017
1058 bool is_visible = true; 1018 bool is_visible = true;
1059 content::NotificationService::current()->Notify( 1019 NotificationService::current()->Notify(
1060 content::NOTIFICATION_WEB_CONTENTS_VISIBILITY_CHANGED, 1020 NOTIFICATION_WEB_CONTENTS_VISIBILITY_CHANGED,
1061 content::Source<WebContents>(this), 1021 Source<WebContents>(this),
1062 content::Details<bool>(&is_visible)); 1022 Details<bool>(&is_visible));
1063 } 1023 }
1064 1024
1065 void WebContentsImpl::WasHidden() { 1025 void WebContentsImpl::WasHidden() {
1066 if (!capturing_contents_) { 1026 if (!capturing_contents_) {
1067 // |GetRenderViewHost()| can be NULL if the user middle clicks a link to 1027 // |GetRenderViewHost()| can be NULL if the user middle clicks a link to
1068 // open a tab in then background, then closes the tab before selecting it. 1028 // open a tab in then background, then closes the tab before selecting it.
1069 // This is because closing the tab calls WebContentsImpl::Destroy(), which 1029 // This is because closing the tab calls WebContentsImpl::Destroy(), which
1070 // removes the |GetRenderViewHost()|; then when we actually destroy the 1030 // removes the |GetRenderViewHost()|; then when we actually destroy the
1071 // window, OnWindowPosChanged() notices and calls WasHidden() (which 1031 // window, OnWindowPosChanged() notices and calls WasHidden() (which
1072 // calls us). 1032 // calls us).
1073 RenderWidgetHostViewPort* rwhv = 1033 RenderWidgetHostViewPort* rwhv =
1074 RenderWidgetHostViewPort::FromRWHV(GetRenderWidgetHostView()); 1034 RenderWidgetHostViewPort::FromRWHV(GetRenderWidgetHostView());
1075 if (rwhv) 1035 if (rwhv)
1076 rwhv->WasHidden(); 1036 rwhv->WasHidden();
1077 } 1037 }
1078 1038
1079 bool is_visible = false; 1039 bool is_visible = false;
1080 content::NotificationService::current()->Notify( 1040 NotificationService::current()->Notify(
1081 content::NOTIFICATION_WEB_CONTENTS_VISIBILITY_CHANGED, 1041 NOTIFICATION_WEB_CONTENTS_VISIBILITY_CHANGED,
1082 content::Source<WebContents>(this), 1042 Source<WebContents>(this),
1083 content::Details<bool>(&is_visible)); 1043 Details<bool>(&is_visible));
1084 } 1044 }
1085 1045
1086 bool WebContentsImpl::NeedToFireBeforeUnload() { 1046 bool WebContentsImpl::NeedToFireBeforeUnload() {
1087 // TODO(creis): Should we fire even for interstitial pages? 1047 // TODO(creis): Should we fire even for interstitial pages?
1088 return WillNotifyDisconnection() && 1048 return WillNotifyDisconnection() &&
1089 !ShowingInterstitialPage() && 1049 !ShowingInterstitialPage() &&
1090 !static_cast<RenderViewHostImpl*>( 1050 !static_cast<RenderViewHostImpl*>(
1091 GetRenderViewHost())->SuddenTerminationAllowed(); 1051 GetRenderViewHost())->SuddenTerminationAllowed();
1092 } 1052 }
1093 1053
(...skipping 26 matching lines...) Expand all
1120 1080
1121 void WebContentsImpl::GetContainerBounds(gfx::Rect* out) const { 1081 void WebContentsImpl::GetContainerBounds(gfx::Rect* out) const {
1122 view_->GetContainerBounds(out); 1082 view_->GetContainerBounds(out);
1123 } 1083 }
1124 1084
1125 void WebContentsImpl::Focus() { 1085 void WebContentsImpl::Focus() {
1126 view_->Focus(); 1086 view_->Focus();
1127 } 1087 }
1128 1088
1129 void WebContentsImpl::Observe(int type, 1089 void WebContentsImpl::Observe(int type,
1130 const content::NotificationSource& source, 1090 const NotificationSource& source,
1131 const content::NotificationDetails& details) { 1091 const NotificationDetails& details) {
1132 switch (type) { 1092 switch (type) {
1133 case content::NOTIFICATION_WEB_CONTENTS_DESTROYED: 1093 case NOTIFICATION_WEB_CONTENTS_DESTROYED:
1134 OnWebContentsDestroyed( 1094 OnWebContentsDestroyed(Source<WebContents>(source).ptr());
1135 content::Source<content::WebContents>(source).ptr());
1136 break; 1095 break;
1137 case content::NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED: { 1096 case NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED: {
1138 RenderWidgetHost* host = content::Source<RenderWidgetHost>(source).ptr(); 1097 RenderWidgetHost* host = Source<RenderWidgetHost>(source).ptr();
1139 for (PendingWidgetViews::iterator i = pending_widget_views_.begin(); 1098 for (PendingWidgetViews::iterator i = pending_widget_views_.begin();
1140 i != pending_widget_views_.end(); ++i) { 1099 i != pending_widget_views_.end(); ++i) {
1141 if (host->GetView() == i->second) { 1100 if (host->GetView() == i->second) {
1142 pending_widget_views_.erase(i); 1101 pending_widget_views_.erase(i);
1143 break; 1102 break;
1144 } 1103 }
1145 } 1104 }
1146 break; 1105 break;
1147 } 1106 }
1148 default: 1107 default:
1149 NOTREACHED(); 1108 NOTREACHED();
1150 } 1109 }
1151 } 1110 }
1152 1111
1153 void WebContentsImpl::Init(BrowserContext* browser_context, 1112 void WebContentsImpl::Init(BrowserContext* browser_context,
1154 SiteInstance* site_instance, 1113 SiteInstance* site_instance,
1155 int routing_id, 1114 int routing_id,
1156 const WebContents* base_web_contents) { 1115 const WebContents* base_web_contents) {
1157 render_manager_.Init(browser_context, site_instance, routing_id); 1116 render_manager_.Init(browser_context, site_instance, routing_id);
1158 1117
1159 view_.reset(content::GetContentClient()->browser()-> 1118 view_.reset(GetContentClient()->browser()->
1160 OverrideCreateWebContentsView(this, &render_view_host_delegate_view_)); 1119 OverrideCreateWebContentsView(this, &render_view_host_delegate_view_));
1161 if (view_.get()) { 1120 if (view_.get()) {
1162 CHECK(render_view_host_delegate_view_); 1121 CHECK(render_view_host_delegate_view_);
1163 } else { 1122 } else {
1164 content::WebContentsViewDelegate* delegate = 1123 WebContentsViewDelegate* delegate =
1165 content::GetContentClient()->browser()->GetWebContentsViewDelegate( 1124 GetContentClient()->browser()->GetWebContentsViewDelegate(
1166 this); 1125 this);
1167 view_.reset(CreateWebContentsView( 1126 view_.reset(CreateWebContentsView(
1168 this, delegate, &render_view_host_delegate_view_)); 1127 this, delegate, &render_view_host_delegate_view_));
1169 CHECK(render_view_host_delegate_view_); 1128 CHECK(render_view_host_delegate_view_);
1170 } 1129 }
1171 CHECK(view_.get()); 1130 CHECK(view_.get());
1172 1131
1173 // We have the initial size of the view be based on the size of the view of 1132 // We have the initial size of the view be based on the size of the view of
1174 // the passed in WebContents. 1133 // the passed in WebContents.
1175 view_->CreateView(base_web_contents ? 1134 view_->CreateView(base_web_contents ?
1176 base_web_contents->GetView()->GetContainerSize() : gfx::Size()); 1135 base_web_contents->GetView()->GetContainerSize() : gfx::Size());
1177 1136
1178 // Listen for whether our opener gets destroyed. 1137 // Listen for whether our opener gets destroyed.
1179 if (opener_) { 1138 if (opener_) {
1180 registrar_.Add(this, content::NOTIFICATION_WEB_CONTENTS_DESTROYED, 1139 registrar_.Add(this, NOTIFICATION_WEB_CONTENTS_DESTROYED,
1181 content::Source<WebContents>(opener_)); 1140 Source<WebContents>(opener_));
1182 } 1141 }
1183 1142
1184 registrar_.Add(this, 1143 registrar_.Add(this,
1185 content::NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED, 1144 NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED,
1186 content::NotificationService::AllBrowserContextsAndSources()); 1145 NotificationService::AllBrowserContextsAndSources());
1187 #if defined(ENABLE_JAVA_BRIDGE) 1146 #if defined(ENABLE_JAVA_BRIDGE)
1188 java_bridge_dispatcher_host_manager_.reset( 1147 java_bridge_dispatcher_host_manager_.reset(
1189 new JavaBridgeDispatcherHostManager(this)); 1148 new JavaBridgeDispatcherHostManager(this));
1190 #endif 1149 #endif
1191 1150
1192 old_browser_plugin_host_.reset(new content::old::BrowserPluginHost(this)); 1151 old_browser_plugin_host_.reset(new old::BrowserPluginHost(this));
1193 } 1152 }
1194 1153
1195 void WebContentsImpl::OnWebContentsDestroyed(WebContents* web_contents) { 1154 void WebContentsImpl::OnWebContentsDestroyed(WebContents* web_contents) {
1196 // Clear the opener if it has been closed. 1155 // Clear the opener if it has been closed.
1197 if (web_contents == opener_) { 1156 if (web_contents == opener_) {
1198 registrar_.Remove(this, content::NOTIFICATION_WEB_CONTENTS_DESTROYED, 1157 registrar_.Remove(this, NOTIFICATION_WEB_CONTENTS_DESTROYED,
1199 content::Source<WebContents>(opener_)); 1158 Source<WebContents>(opener_));
1200 opener_ = NULL; 1159 opener_ = NULL;
1201 } 1160 }
1202 } 1161 }
1203 1162
1204 void WebContentsImpl::AddObserver(WebContentsObserver* observer) { 1163 void WebContentsImpl::AddObserver(WebContentsObserver* observer) {
1205 observers_.AddObserver(observer); 1164 observers_.AddObserver(observer);
1206 } 1165 }
1207 1166
1208 void WebContentsImpl::RemoveObserver(WebContentsObserver* observer) { 1167 void WebContentsImpl::RemoveObserver(WebContentsObserver* observer) {
1209 observers_.RemoveObserver(observer); 1168 observers_.RemoveObserver(observer);
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
1320 // Create the new web contents. This will automatically create the new 1279 // Create the new web contents. This will automatically create the new
1321 // WebContentsView. In the future, we may want to create the view separately. 1280 // WebContentsView. In the future, we may want to create the view separately.
1322 WebContentsImpl* new_contents = 1281 WebContentsImpl* new_contents =
1323 new WebContentsImpl(GetBrowserContext(), 1282 new WebContentsImpl(GetBrowserContext(),
1324 params.opener_suppressed ? NULL : this); 1283 params.opener_suppressed ? NULL : this);
1325 1284
1326 // We must assign the SessionStorageNamespace before calling Init(). 1285 // We must assign the SessionStorageNamespace before calling Init().
1327 // 1286 //
1328 // http://crbug.com/142685 1287 // http://crbug.com/142685
1329 const std::string& partition_id = 1288 const std::string& partition_id =
1330 content::GetContentClient()->browser()-> 1289 GetContentClient()->browser()->
1331 GetStoragePartitionIdForSite(GetBrowserContext(), 1290 GetStoragePartitionIdForSite(GetBrowserContext(),
1332 site_instance->GetSiteURL()); 1291 site_instance->GetSiteURL());
1333 content::StoragePartition* partition = 1292 StoragePartition* partition =
1334 BrowserContext::GetStoragePartition(GetBrowserContext(), 1293 BrowserContext::GetStoragePartition(GetBrowserContext(),
1335 site_instance); 1294 site_instance);
1336 DOMStorageContextImpl* dom_storage_context = 1295 DOMStorageContextImpl* dom_storage_context =
1337 static_cast<DOMStorageContextImpl*>(partition->GetDOMStorageContext()); 1296 static_cast<DOMStorageContextImpl*>(partition->GetDOMStorageContext());
1338 SessionStorageNamespaceImpl* session_storage_namespace_impl = 1297 SessionStorageNamespaceImpl* session_storage_namespace_impl =
1339 static_cast<SessionStorageNamespaceImpl*>(session_storage_namespace); 1298 static_cast<SessionStorageNamespaceImpl*>(session_storage_namespace);
1340 CHECK(session_storage_namespace_impl->IsFromContext(dom_storage_context)); 1299 CHECK(session_storage_namespace_impl->IsFromContext(dom_storage_context));
1341 new_contents->GetController().SetSessionStorageNamespace( 1300 new_contents->GetController().SetSessionStorageNamespace(
1342 partition_id, 1301 partition_id,
1343 session_storage_namespace); 1302 session_storage_namespace);
1344 new_contents->Init(GetBrowserContext(), site_instance, route_id, this); 1303 new_contents->Init(GetBrowserContext(), site_instance, route_id, this);
1345 1304
1346 new_contents->set_opener_web_ui_type(GetWebUITypeForCurrentState()); 1305 new_contents->set_opener_web_ui_type(GetWebUITypeForCurrentState());
1347 1306
1348 if (!params.opener_suppressed) { 1307 if (!params.opener_suppressed) {
1349 content::WebContentsView* new_view = new_contents->GetView(); 1308 WebContentsView* new_view = new_contents->GetView();
1350 1309
1351 // TODO(brettw): It seems bogus that we have to call this function on the 1310 // TODO(brettw): It seems bogus that we have to call this function on the
1352 // newly created object and give it one of its own member variables. 1311 // newly created object and give it one of its own member variables.
1353 new_view->CreateViewForWidget(new_contents->GetRenderViewHost()); 1312 new_view->CreateViewForWidget(new_contents->GetRenderViewHost());
1354 1313
1355 // Save the created window associated with the route so we can show it 1314 // Save the created window associated with the route so we can show it
1356 // later. 1315 // later.
1357 DCHECK_NE(MSG_ROUTING_NONE, route_id); 1316 DCHECK_NE(MSG_ROUTING_NONE, route_id);
1358 pending_contents_[route_id] = new_contents; 1317 pending_contents_[route_id] = new_contents;
1359 } 1318 }
1360 1319
1361 if (delegate_) { 1320 if (delegate_) {
1362 delegate_->WebContentsCreated( 1321 delegate_->WebContentsCreated(
1363 this, params.opener_frame_id, params.target_url, new_contents); 1322 this, params.opener_frame_id, params.target_url, new_contents);
1364 } 1323 }
1365 1324
1366 if (params.opener_suppressed) { 1325 if (params.opener_suppressed) {
1367 // When the opener is suppressed, the original renderer cannot access the 1326 // When the opener is suppressed, the original renderer cannot access the
1368 // new window. As a result, we need to show and navigate the window here. 1327 // new window. As a result, we need to show and navigate the window here.
1369 bool was_blocked = false; 1328 bool was_blocked = false;
1370 if (delegate_) { 1329 if (delegate_) {
1371 gfx::Rect initial_pos; 1330 gfx::Rect initial_pos;
1372 delegate_->AddNewContents( 1331 delegate_->AddNewContents(
1373 this, new_contents, params.disposition, initial_pos, 1332 this, new_contents, params.disposition, initial_pos,
1374 params.user_gesture, &was_blocked); 1333 params.user_gesture, &was_blocked);
1375 } 1334 }
1376 if (!was_blocked) { 1335 if (!was_blocked) {
1377 content::OpenURLParams open_params(params.target_url, 1336 OpenURLParams open_params(params.target_url,
1378 content::Referrer(), 1337 Referrer(),
1379 CURRENT_TAB, 1338 CURRENT_TAB,
1380 content::PAGE_TRANSITION_LINK, 1339 PAGE_TRANSITION_LINK,
1381 true /* is_renderer_initiated */); 1340 true /* is_renderer_initiated */);
1382 new_contents->OpenURL(open_params); 1341 new_contents->OpenURL(open_params);
1383 } 1342 }
1384 } 1343 }
1385 } 1344 }
1386 1345
1387 void WebContentsImpl::CreateNewWidget(int route_id, 1346 void WebContentsImpl::CreateNewWidget(int route_id,
1388 WebKit::WebPopupType popup_type) { 1347 WebKit::WebPopupType popup_type) {
1389 CreateNewWidget(route_id, false, popup_type); 1348 CreateNewWidget(route_id, false, popup_type);
1390 } 1349 }
1391 1350
1392 void WebContentsImpl::CreateNewFullscreenWidget(int route_id) { 1351 void WebContentsImpl::CreateNewFullscreenWidget(int route_id) {
1393 CreateNewWidget(route_id, true, WebKit::WebPopupTypeNone); 1352 CreateNewWidget(route_id, true, WebKit::WebPopupTypeNone);
1394 } 1353 }
1395 1354
1396 void WebContentsImpl::CreateNewWidget(int route_id, 1355 void WebContentsImpl::CreateNewWidget(int route_id,
1397 bool is_fullscreen, 1356 bool is_fullscreen,
1398 WebKit::WebPopupType popup_type) { 1357 WebKit::WebPopupType popup_type) {
1399 content::RenderProcessHost* process = GetRenderProcessHost(); 1358 RenderProcessHost* process = GetRenderProcessHost();
1400 RenderWidgetHostImpl* widget_host = 1359 RenderWidgetHostImpl* widget_host =
1401 new RenderWidgetHostImpl(this, process, route_id); 1360 new RenderWidgetHostImpl(this, process, route_id);
1402 created_widgets_.insert(widget_host); 1361 created_widgets_.insert(widget_host);
1403 1362
1404 RenderWidgetHostViewPort* widget_view = 1363 RenderWidgetHostViewPort* widget_view =
1405 RenderWidgetHostViewPort::CreateViewForWidget(widget_host); 1364 RenderWidgetHostViewPort::CreateViewForWidget(widget_host);
1406 if (!is_fullscreen) { 1365 if (!is_fullscreen) {
1407 // Popups should not get activated. 1366 // Popups should not get activated.
1408 widget_view->SetPopupType(popup_type); 1367 widget_view->SetPopupType(popup_type);
1409 } 1368 }
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
1505 RenderWidgetHost* widget_host = widget_host_view->GetRenderWidgetHost(); 1464 RenderWidgetHost* widget_host = widget_host_view->GetRenderWidgetHost();
1506 if (!widget_host->GetProcess()->HasConnection()) { 1465 if (!widget_host->GetProcess()->HasConnection()) {
1507 // The view has gone away or the renderer crashed. Nothing to do. 1466 // The view has gone away or the renderer crashed. Nothing to do.
1508 return NULL; 1467 return NULL;
1509 } 1468 }
1510 1469
1511 return widget_host_view; 1470 return widget_host_view;
1512 } 1471 }
1513 1472
1514 void WebContentsImpl::ShowContextMenu( 1473 void WebContentsImpl::ShowContextMenu(
1515 const content::ContextMenuParams& params, 1474 const ContextMenuParams& params,
1516 content::ContextMenuSourceType type) { 1475 ContextMenuSourceType type) {
1517 // Allow WebContentsDelegates to handle the context menu operation first. 1476 // Allow WebContentsDelegates to handle the context menu operation first.
1518 if (delegate_ && delegate_->HandleContextMenu(params)) 1477 if (delegate_ && delegate_->HandleContextMenu(params))
1519 return; 1478 return;
1520 1479
1521 render_view_host_delegate_view_->ShowContextMenu(params, type); 1480 render_view_host_delegate_view_->ShowContextMenu(params, type);
1522 } 1481 }
1523 1482
1524 void WebContentsImpl::RequestMediaAccessPermission( 1483 void WebContentsImpl::RequestMediaAccessPermission(
1525 const content::MediaStreamRequest* request, 1484 const MediaStreamRequest* request,
1526 const content::MediaResponseCallback& callback) { 1485 const MediaResponseCallback& callback) {
1527 if (delegate_) 1486 if (delegate_)
1528 delegate_->RequestMediaAccessPermission(this, request, callback); 1487 delegate_->RequestMediaAccessPermission(this, request, callback);
1529 else 1488 else
1530 callback.Run(content::MediaStreamDevices()); 1489 callback.Run(MediaStreamDevices());
1531 } 1490 }
1532 1491
1533 #if defined(OS_ANDROID) 1492 #if defined(OS_ANDROID)
1534 void WebContentsImpl::AttachLayer(WebKit::WebLayer* layer) { 1493 void WebContentsImpl::AttachLayer(WebKit::WebLayer* layer) {
1535 if (delegate_) 1494 if (delegate_)
1536 delegate_->AttachLayer(this, layer); 1495 delegate_->AttachLayer(this, layer);
1537 } 1496 }
1538 1497
1539 void WebContentsImpl::RemoveLayer(WebKit::WebLayer* layer) { 1498 void WebContentsImpl::RemoveLayer(WebKit::WebLayer* layer) {
1540 if (delegate_) 1499 if (delegate_)
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1575 } 1534 }
1576 1535
1577 bool WebContentsImpl::NavigateToPendingEntry( 1536 bool WebContentsImpl::NavigateToPendingEntry(
1578 NavigationController::ReloadType reload_type) { 1537 NavigationController::ReloadType reload_type) {
1579 return NavigateToEntry( 1538 return NavigateToEntry(
1580 *NavigationEntryImpl::FromNavigationEntry(controller_.GetPendingEntry()), 1539 *NavigationEntryImpl::FromNavigationEntry(controller_.GetPendingEntry()),
1581 reload_type); 1540 reload_type);
1582 } 1541 }
1583 1542
1584 void WebContentsImpl::RenderViewForInterstitialPageCreated( 1543 void WebContentsImpl::RenderViewForInterstitialPageCreated(
1585 content::RenderViewHost* render_view_host) { 1544 RenderViewHost* render_view_host) {
1586 FOR_EACH_OBSERVER(WebContentsObserver, observers_, 1545 FOR_EACH_OBSERVER(WebContentsObserver, observers_,
1587 RenderViewForInterstitialPageCreated(render_view_host)); 1546 RenderViewForInterstitialPageCreated(render_view_host));
1588 } 1547 }
1589 1548
1590 bool WebContentsImpl::NavigateToEntry( 1549 bool WebContentsImpl::NavigateToEntry(
1591 const NavigationEntryImpl& entry, 1550 const NavigationEntryImpl& entry,
1592 NavigationController::ReloadType reload_type) { 1551 NavigationController::ReloadType reload_type) {
1593 // The renderer will reject IPC messages with URLs longer than 1552 // The renderer will reject IPC messages with URLs longer than
1594 // this limit, so don't attempt to navigate with a longer URL. 1553 // this limit, so don't attempt to navigate with a longer URL.
1595 if (entry.GetURL().spec().size() > content::kMaxURLChars) 1554 if (entry.GetURL().spec().size() > kMaxURLChars)
1596 return false; 1555 return false;
1597 1556
1598 RenderViewHostImpl* dest_render_view_host = 1557 RenderViewHostImpl* dest_render_view_host =
1599 static_cast<RenderViewHostImpl*>(render_manager_.Navigate(entry)); 1558 static_cast<RenderViewHostImpl*>(render_manager_.Navigate(entry));
1600 if (!dest_render_view_host) 1559 if (!dest_render_view_host)
1601 return false; // Unable to create the desired render view host. 1560 return false; // Unable to create the desired render view host.
1602 1561
1603 // For security, we should never send non-Web-UI URLs to a Web UI renderer. 1562 // For security, we should never send non-Web-UI URLs to a Web UI renderer.
1604 // Double check that here. 1563 // Double check that here.
1605 int enabled_bindings = dest_render_view_host->GetEnabledBindings(); 1564 int enabled_bindings = dest_render_view_host->GetEnabledBindings();
1606 WebUIControllerFactory* factory = 1565 WebUIControllerFactory* factory =
1607 content::GetContentClient()->browser()->GetWebUIControllerFactory(); 1566 GetContentClient()->browser()->GetWebUIControllerFactory();
1608 bool data_urls_allowed = delegate_ && delegate_->CanLoadDataURLsInWebUI(); 1567 bool data_urls_allowed = delegate_ && delegate_->CanLoadDataURLsInWebUI();
1609 bool is_allowed_in_web_ui_renderer = 1568 bool is_allowed_in_web_ui_renderer =
1610 factory && 1569 factory &&
1611 factory->IsURLAcceptableForWebUI(GetBrowserContext(), entry.GetURL(), 1570 factory->IsURLAcceptableForWebUI(GetBrowserContext(), entry.GetURL(),
1612 data_urls_allowed); 1571 data_urls_allowed);
1613 if ((enabled_bindings & content::BINDINGS_POLICY_WEB_UI) && 1572 if ((enabled_bindings & BINDINGS_POLICY_WEB_UI) &&
1614 !is_allowed_in_web_ui_renderer) { 1573 !is_allowed_in_web_ui_renderer) {
1615 // Log the URL to help us diagnose any future failures of this CHECK. 1574 // Log the URL to help us diagnose any future failures of this CHECK.
1616 content::GetContentClient()->SetActiveURL(entry.GetURL()); 1575 GetContentClient()->SetActiveURL(entry.GetURL());
1617 CHECK(0); 1576 CHECK(0);
1618 } 1577 }
1619 1578
1620 // Tell DevTools agent that it is attached prior to the navigation. 1579 // Tell DevTools agent that it is attached prior to the navigation.
1621 DevToolsManagerImpl::GetInstance()->OnNavigatingToPendingEntry( 1580 DevToolsManagerImpl::GetInstance()->OnNavigatingToPendingEntry(
1622 GetRenderViewHost(), 1581 GetRenderViewHost(),
1623 dest_render_view_host, 1582 dest_render_view_host,
1624 entry.GetURL()); 1583 entry.GetURL());
1625 1584
1626 // Notify observers that we will navigate in this RV. 1585 // Notify observers that we will navigate in this RV.
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
1714 contents_mime_type_ == "text/plain" || 1673 contents_mime_type_ == "text/plain" ||
1715 contents_mime_type_ == "text/css" || 1674 contents_mime_type_ == "text/css" ||
1716 net::IsSupportedJavascriptMimeType(contents_mime_type_.c_str()); 1675 net::IsSupportedJavascriptMimeType(contents_mime_type_.c_str());
1717 } 1676 }
1718 1677
1719 void WebContentsImpl::OnSavePage() { 1678 void WebContentsImpl::OnSavePage() {
1720 // If we can not save the page, try to download it. 1679 // If we can not save the page, try to download it.
1721 if (!IsSavable()) { 1680 if (!IsSavable()) {
1722 download_stats::RecordDownloadSource( 1681 download_stats::RecordDownloadSource(
1723 download_stats::INITIATED_BY_SAVE_PACKAGE_ON_NON_HTML); 1682 download_stats::INITIATED_BY_SAVE_PACKAGE_ON_NON_HTML);
1724 SaveURL(GetURL(), content::Referrer(), true); 1683 SaveURL(GetURL(), Referrer(), true);
1725 return; 1684 return;
1726 } 1685 }
1727 1686
1728 Stop(); 1687 Stop();
1729 1688
1730 // Create the save package and possibly prompt the user for the name to save 1689 // Create the save package and possibly prompt the user for the name to save
1731 // the page as. The user prompt is an asynchronous operation that runs on 1690 // the page as. The user prompt is an asynchronous operation that runs on
1732 // another thread. 1691 // another thread.
1733 save_package_ = new SavePackage(this); 1692 save_package_ = new SavePackage(this);
1734 save_package_->GetSaveInfo(); 1693 save_package_->GetSaveInfo();
1735 } 1694 }
1736 1695
1737 // Used in automated testing to bypass prompting the user for file names. 1696 // Used in automated testing to bypass prompting the user for file names.
1738 // Instead, the names and paths are hard coded rather than running them through 1697 // Instead, the names and paths are hard coded rather than running them through
1739 // file name sanitation and extension / mime checking. 1698 // file name sanitation and extension / mime checking.
1740 bool WebContentsImpl::SavePage(const FilePath& main_file, 1699 bool WebContentsImpl::SavePage(const FilePath& main_file,
1741 const FilePath& dir_path, 1700 const FilePath& dir_path,
1742 content::SavePageType save_type) { 1701 SavePageType save_type) {
1743 // Stop the page from navigating. 1702 // Stop the page from navigating.
1744 Stop(); 1703 Stop();
1745 1704
1746 save_package_ = new SavePackage(this, save_type, main_file, dir_path); 1705 save_package_ = new SavePackage(this, save_type, main_file, dir_path);
1747 return save_package_->Init(content::SavePackageDownloadCreatedCallback()); 1706 return save_package_->Init(SavePackageDownloadCreatedCallback());
1748 } 1707 }
1749 1708
1750 void WebContentsImpl::GenerateMHTML( 1709 void WebContentsImpl::GenerateMHTML(
1751 const FilePath& file, 1710 const FilePath& file,
1752 const base::Callback<void(const FilePath&, int64)>& callback) { 1711 const base::Callback<void(const FilePath&, int64)>& callback) {
1753 MHTMLGenerationManager::GetInstance()->GenerateMHTML(this, file, callback); 1712 MHTMLGenerationManager::GetInstance()->GenerateMHTML(this, file, callback);
1754 } 1713 }
1755 1714
1756 bool WebContentsImpl::IsActiveEntry(int32 page_id) { 1715 bool WebContentsImpl::IsActiveEntry(int32 page_id) {
1757 NavigationEntryImpl* active_entry = 1716 NavigationEntryImpl* active_entry =
(...skipping 14 matching lines...) Expand all
1772 void WebContentsImpl::SetOverrideEncoding(const std::string& encoding) { 1731 void WebContentsImpl::SetOverrideEncoding(const std::string& encoding) {
1773 SetEncoding(encoding); 1732 SetEncoding(encoding);
1774 Send(new ViewMsg_SetPageEncoding(GetRoutingID(), encoding)); 1733 Send(new ViewMsg_SetPageEncoding(GetRoutingID(), encoding));
1775 } 1734 }
1776 1735
1777 void WebContentsImpl::ResetOverrideEncoding() { 1736 void WebContentsImpl::ResetOverrideEncoding() {
1778 encoding_.clear(); 1737 encoding_.clear();
1779 Send(new ViewMsg_ResetPageEncodingToDefault(GetRoutingID())); 1738 Send(new ViewMsg_ResetPageEncodingToDefault(GetRoutingID()));
1780 } 1739 }
1781 1740
1782 content::RendererPreferences* WebContentsImpl::GetMutableRendererPrefs() { 1741 RendererPreferences* WebContentsImpl::GetMutableRendererPrefs() {
1783 return &renderer_preferences_; 1742 return &renderer_preferences_;
1784 } 1743 }
1785 1744
1786 void WebContentsImpl::SetNewTabStartTime(const base::TimeTicks& time) { 1745 void WebContentsImpl::SetNewTabStartTime(const base::TimeTicks& time) {
1787 new_tab_start_time_ = time; 1746 new_tab_start_time_ = time;
1788 } 1747 }
1789 1748
1790 base::TimeTicks WebContentsImpl::GetNewTabStartTime() const { 1749 base::TimeTicks WebContentsImpl::GetNewTabStartTime() const {
1791 return new_tab_start_time_; 1750 return new_tab_start_time_;
1792 } 1751 }
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
1894 gfx::Size WebContentsImpl::GetPreferredSize() const { 1853 gfx::Size WebContentsImpl::GetPreferredSize() const {
1895 return preferred_size_; 1854 return preferred_size_;
1896 } 1855 }
1897 1856
1898 int WebContentsImpl::GetContentRestrictions() const { 1857 int WebContentsImpl::GetContentRestrictions() const {
1899 return content_restrictions_; 1858 return content_restrictions_;
1900 } 1859 }
1901 1860
1902 WebUI::TypeID WebContentsImpl::GetWebUITypeForCurrentState() { 1861 WebUI::TypeID WebContentsImpl::GetWebUITypeForCurrentState() {
1903 WebUIControllerFactory* factory = 1862 WebUIControllerFactory* factory =
1904 content::GetContentClient()->browser()->GetWebUIControllerFactory(); 1863 GetContentClient()->browser()->GetWebUIControllerFactory();
1905 if (!factory) 1864 if (!factory)
1906 return WebUI::kNoWebUI; 1865 return WebUI::kNoWebUI;
1907 return factory->GetWebUIType(GetBrowserContext(), GetURL()); 1866 return factory->GetWebUIType(GetBrowserContext(), GetURL());
1908 } 1867 }
1909 1868
1910 content::WebUI* WebContentsImpl::GetWebUIForCurrentState() { 1869 WebUI* WebContentsImpl::GetWebUIForCurrentState() {
1911 // When there is a pending navigation entry, we want to use the pending WebUI 1870 // When there is a pending navigation entry, we want to use the pending WebUI
1912 // that goes along with it to control the basic flags. For example, we want to 1871 // that goes along with it to control the basic flags. For example, we want to
1913 // show the pending URL in the URL bar, so we want the display_url flag to 1872 // show the pending URL in the URL bar, so we want the display_url flag to
1914 // be from the pending entry. 1873 // be from the pending entry.
1915 // 1874 //
1916 // The confusion comes because there are multiple possibilities for the 1875 // The confusion comes because there are multiple possibilities for the
1917 // initial load in a tab as a side effect of the way the RenderViewHostManager 1876 // initial load in a tab as a side effect of the way the RenderViewHostManager
1918 // works. 1877 // works.
1919 // 1878 //
1920 // - For the very first tab the load looks "normal". The new tab Web UI is 1879 // - For the very first tab the load looks "normal". The new tab Web UI is
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1963 } 1922 }
1964 1923
1965 void WebContentsImpl::DidEndColorChooser(int color_chooser_id) { 1924 void WebContentsImpl::DidEndColorChooser(int color_chooser_id) {
1966 Send(new ViewMsg_DidEndColorChooser(GetRoutingID(), color_chooser_id)); 1925 Send(new ViewMsg_DidEndColorChooser(GetRoutingID(), color_chooser_id));
1967 if (delegate_) 1926 if (delegate_)
1968 delegate_->DidEndColorChooser(); 1927 delegate_->DidEndColorChooser();
1969 color_chooser_ = NULL; 1928 color_chooser_ = NULL;
1970 } 1929 }
1971 1930
1972 bool WebContentsImpl::FocusLocationBarByDefault() { 1931 bool WebContentsImpl::FocusLocationBarByDefault() {
1973 content::WebUI* web_ui = GetWebUIForCurrentState(); 1932 WebUI* web_ui = GetWebUIForCurrentState();
1974 if (web_ui) 1933 if (web_ui)
1975 return web_ui->ShouldFocusLocationBarByDefault(); 1934 return web_ui->ShouldFocusLocationBarByDefault();
1976 NavigationEntry* entry = controller_.GetActiveEntry(); 1935 NavigationEntry* entry = controller_.GetActiveEntry();
1977 return (entry && entry->GetURL() == GURL(chrome::kAboutBlankURL)); 1936 return (entry && entry->GetURL() == GURL(chrome::kAboutBlankURL));
1978 } 1937 }
1979 1938
1980 void WebContentsImpl::SetFocusToLocationBar(bool select_all) { 1939 void WebContentsImpl::SetFocusToLocationBar(bool select_all) {
1981 if (delegate_) 1940 if (delegate_)
1982 delegate_->SetFocusToLocationBar(select_all); 1941 delegate_->SetFocusToLocationBar(select_all);
1983 } 1942 }
(...skipping 10 matching lines...) Expand all
1994 int intent_id) { 1953 int intent_id) {
1995 if (!delegate_) 1954 if (!delegate_)
1996 return; 1955 return;
1997 1956
1998 WebIntentsDispatcherImpl* intents_dispatcher = 1957 WebIntentsDispatcherImpl* intents_dispatcher =
1999 new WebIntentsDispatcherImpl(this, intent, intent_id); 1958 new WebIntentsDispatcherImpl(this, intent, intent_id);
2000 delegate_->WebIntentDispatch(this, intents_dispatcher); 1959 delegate_->WebIntentDispatch(this, intents_dispatcher);
2001 } 1960 }
2002 1961
2003 void WebContentsImpl::DidStartProvisionalLoadForFrame( 1962 void WebContentsImpl::DidStartProvisionalLoadForFrame(
2004 content::RenderViewHost* render_view_host, 1963 RenderViewHost* render_view_host,
2005 int64 frame_id, 1964 int64 frame_id,
2006 int64 parent_frame_id, 1965 int64 parent_frame_id,
2007 bool is_main_frame, 1966 bool is_main_frame,
2008 const GURL& opener_url, 1967 const GURL& opener_url,
2009 const GURL& url) { 1968 const GURL& url) {
2010 bool is_error_page = (url.spec() == content::kUnreachableWebDataURL); 1969 bool is_error_page = (url.spec() == kUnreachableWebDataURL);
2011 GURL validated_url(url); 1970 GURL validated_url(url);
2012 GURL validated_opener_url(opener_url); 1971 GURL validated_opener_url(opener_url);
2013 content::RenderProcessHost* render_process_host = 1972 RenderProcessHost* render_process_host =
2014 render_view_host->GetProcess(); 1973 render_view_host->GetProcess();
2015 RenderViewHost::FilterURL( 1974 RenderViewHost::FilterURL(
2016 render_process_host->GetID(), 1975 render_process_host->GetID(),
2017 false, 1976 false,
2018 &validated_url); 1977 &validated_url);
2019 RenderViewHost::FilterURL( 1978 RenderViewHost::FilterURL(
2020 render_process_host->GetID(), 1979 render_process_host->GetID(),
2021 true, 1980 true,
2022 &validated_opener_url); 1981 &validated_opener_url);
2023 1982
2024 // Notify observers about the start of the provisional load. 1983 // Notify observers about the start of the provisional load.
2025 FOR_EACH_OBSERVER(WebContentsObserver, observers_, 1984 FOR_EACH_OBSERVER(WebContentsObserver, observers_,
2026 DidStartProvisionalLoadForFrame(frame_id, parent_frame_id, 1985 DidStartProvisionalLoadForFrame(frame_id, parent_frame_id,
2027 is_main_frame, validated_url, is_error_page, 1986 is_main_frame, validated_url, is_error_page,
2028 render_view_host)); 1987 render_view_host));
2029 1988
2030 if (is_main_frame) { 1989 if (is_main_frame) {
2031 // Notify observers about the provisional change in the main frame URL. 1990 // Notify observers about the provisional change in the main frame URL.
2032 FOR_EACH_OBSERVER(WebContentsObserver, observers_, 1991 FOR_EACH_OBSERVER(WebContentsObserver, observers_,
2033 ProvisionalChangeToMainFrameUrl(validated_url, 1992 ProvisionalChangeToMainFrameUrl(validated_url,
2034 validated_opener_url, 1993 validated_opener_url,
2035 render_view_host)); 1994 render_view_host));
2036 } 1995 }
2037 } 1996 }
2038 1997
2039 void WebContentsImpl::DidRedirectProvisionalLoad( 1998 void WebContentsImpl::DidRedirectProvisionalLoad(
2040 content::RenderViewHost* render_view_host, 1999 RenderViewHost* render_view_host,
2041 int32 page_id, 2000 int32 page_id,
2042 const GURL& opener_url, 2001 const GURL& opener_url,
2043 const GURL& source_url, 2002 const GURL& source_url,
2044 const GURL& target_url) { 2003 const GURL& target_url) {
2045 // TODO(creis): Remove this method and have the pre-rendering code listen to 2004 // TODO(creis): Remove this method and have the pre-rendering code listen to
2046 // the ResourceDispatcherHost's RESOURCE_RECEIVED_REDIRECT notification 2005 // the ResourceDispatcherHost's RESOURCE_RECEIVED_REDIRECT notification
2047 // instead. See http://crbug.com/78512. 2006 // instead. See http://crbug.com/78512.
2048 GURL validated_source_url(source_url); 2007 GURL validated_source_url(source_url);
2049 GURL validated_target_url(target_url); 2008 GURL validated_target_url(target_url);
2050 GURL validated_opener_url(opener_url); 2009 GURL validated_opener_url(opener_url);
2051 content::RenderProcessHost* render_process_host = 2010 RenderProcessHost* render_process_host =
2052 render_view_host->GetProcess(); 2011 render_view_host->GetProcess();
2053 RenderViewHostImpl::FilterURL( 2012 RenderViewHostImpl::FilterURL(
2054 ChildProcessSecurityPolicyImpl::GetInstance(), 2013 ChildProcessSecurityPolicyImpl::GetInstance(),
2055 render_process_host->GetID(), 2014 render_process_host->GetID(),
2056 false, 2015 false,
2057 &validated_source_url); 2016 &validated_source_url);
2058 RenderViewHostImpl::FilterURL( 2017 RenderViewHostImpl::FilterURL(
2059 ChildProcessSecurityPolicyImpl::GetInstance(), 2018 ChildProcessSecurityPolicyImpl::GetInstance(),
2060 render_process_host->GetID(), 2019 render_process_host->GetID(),
2061 false, 2020 false,
(...skipping 14 matching lines...) Expand all
2076 return; 2035 return;
2077 2036
2078 // Notify observers about the provisional change in the main frame URL. 2037 // Notify observers about the provisional change in the main frame URL.
2079 FOR_EACH_OBSERVER(WebContentsObserver, observers_, 2038 FOR_EACH_OBSERVER(WebContentsObserver, observers_,
2080 ProvisionalChangeToMainFrameUrl(validated_target_url, 2039 ProvisionalChangeToMainFrameUrl(validated_target_url,
2081 validated_opener_url, 2040 validated_opener_url,
2082 render_view_host)); 2041 render_view_host));
2083 } 2042 }
2084 2043
2085 void WebContentsImpl::DidFailProvisionalLoadWithError( 2044 void WebContentsImpl::DidFailProvisionalLoadWithError(
2086 content::RenderViewHost* render_view_host, 2045 RenderViewHost* render_view_host,
2087 const ViewHostMsg_DidFailProvisionalLoadWithError_Params& params) { 2046 const ViewHostMsg_DidFailProvisionalLoadWithError_Params& params) {
2088 VLOG(1) << "Failed Provisional Load: " << params.url.possibly_invalid_spec() 2047 VLOG(1) << "Failed Provisional Load: " << params.url.possibly_invalid_spec()
2089 << ", error_code: " << params.error_code 2048 << ", error_code: " << params.error_code
2090 << ", error_description: " << params.error_description 2049 << ", error_description: " << params.error_description
2091 << ", is_main_frame: " << params.is_main_frame 2050 << ", is_main_frame: " << params.is_main_frame
2092 << ", showing_repost_interstitial: " << 2051 << ", showing_repost_interstitial: " <<
2093 params.showing_repost_interstitial 2052 params.showing_repost_interstitial
2094 << ", frame_id: " << params.frame_id; 2053 << ", frame_id: " << params.frame_id;
2095 GURL validated_url(params.url); 2054 GURL validated_url(params.url);
2096 content::RenderProcessHost* render_process_host = 2055 RenderProcessHost* render_process_host =
2097 render_view_host->GetProcess(); 2056 render_view_host->GetProcess();
2098 RenderViewHost::FilterURL( 2057 RenderViewHost::FilterURL(
2099 render_process_host->GetID(), 2058 render_process_host->GetID(),
2100 false, 2059 false,
2101 &validated_url); 2060 &validated_url);
2102 2061
2103 if (net::ERR_ABORTED == params.error_code) { 2062 if (net::ERR_ABORTED == params.error_code) {
2104 // EVIL HACK ALERT! Ignore failed loads when we're showing interstitials. 2063 // EVIL HACK ALERT! Ignore failed loads when we're showing interstitials.
2105 // This means that the interstitial won't be torn down properly, which is 2064 // This means that the interstitial won't be torn down properly, which is
2106 // bad. But if we have an interstitial, go back to another tab type, and 2065 // bad. But if we have an interstitial, go back to another tab type, and
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
2148 const std::string& mime_type, 2107 const std::string& mime_type,
2149 ResourceType::Type resource_type) { 2108 ResourceType::Type resource_type) {
2150 base::StatsCounter cache("WebKit.CacheHit"); 2109 base::StatsCounter cache("WebKit.CacheHit");
2151 cache.Increment(); 2110 cache.Increment();
2152 2111
2153 // Send out a notification that we loaded a resource from our memory cache. 2112 // Send out a notification that we loaded a resource from our memory cache.
2154 int cert_id = 0; 2113 int cert_id = 0;
2155 net::CertStatus cert_status = 0; 2114 net::CertStatus cert_status = 0;
2156 int security_bits = -1; 2115 int security_bits = -1;
2157 int connection_status = 0; 2116 int connection_status = 0;
2158 content::DeserializeSecurityInfo(security_info, &cert_id, &cert_status, 2117 DeserializeSecurityInfo(security_info, &cert_id, &cert_status,
2159 &security_bits, &connection_status); 2118 &security_bits, &connection_status);
2160 content::LoadFromMemoryCacheDetails details( 2119 LoadFromMemoryCacheDetails details(
2161 url, GetRenderProcessHost()->GetID(), cert_id, cert_status, http_method, 2120 url, GetRenderProcessHost()->GetID(), cert_id, cert_status, http_method,
2162 mime_type, resource_type); 2121 mime_type, resource_type);
2163 2122
2164 content::NotificationService::current()->Notify( 2123 NotificationService::current()->Notify(
2165 content::NOTIFICATION_LOAD_FROM_MEMORY_CACHE, 2124 NOTIFICATION_LOAD_FROM_MEMORY_CACHE,
2166 content::Source<NavigationController>(&controller_), 2125 Source<NavigationController>(&controller_),
2167 content::Details<content::LoadFromMemoryCacheDetails>(&details)); 2126 Details<LoadFromMemoryCacheDetails>(&details));
2168 } 2127 }
2169 2128
2170 void WebContentsImpl::OnDidDisplayInsecureContent() { 2129 void WebContentsImpl::OnDidDisplayInsecureContent() {
2171 content::RecordAction(UserMetricsAction("SSL.DisplayedInsecureContent")); 2130 RecordAction(UserMetricsAction("SSL.DisplayedInsecureContent"));
2172 displayed_insecure_content_ = true; 2131 displayed_insecure_content_ = true;
2173 SSLManager::NotifySSLInternalStateChanged(&GetController()); 2132 SSLManager::NotifySSLInternalStateChanged(&GetController());
2174 } 2133 }
2175 2134
2176 void WebContentsImpl::OnDidRunInsecureContent( 2135 void WebContentsImpl::OnDidRunInsecureContent(
2177 const std::string& security_origin, const GURL& target_url) { 2136 const std::string& security_origin, const GURL& target_url) {
2178 LOG(INFO) << security_origin << " ran insecure content from " 2137 LOG(INFO) << security_origin << " ran insecure content from "
2179 << target_url.possibly_invalid_spec(); 2138 << target_url.possibly_invalid_spec();
2180 content::RecordAction(UserMetricsAction("SSL.RanInsecureContent")); 2139 RecordAction(UserMetricsAction("SSL.RanInsecureContent"));
2181 if (EndsWith(security_origin, kDotGoogleDotCom, false)) 2140 if (EndsWith(security_origin, kDotGoogleDotCom, false))
2182 content::RecordAction(UserMetricsAction("SSL.RanInsecureContentGoogle")); 2141 RecordAction(UserMetricsAction("SSL.RanInsecureContentGoogle"));
2183 controller_.ssl_manager()->DidRunInsecureContent(security_origin); 2142 controller_.ssl_manager()->DidRunInsecureContent(security_origin);
2184 displayed_insecure_content_ = true; 2143 displayed_insecure_content_ = true;
2185 SSLManager::NotifySSLInternalStateChanged(&GetController()); 2144 SSLManager::NotifySSLInternalStateChanged(&GetController());
2186 } 2145 }
2187 2146
2188 void WebContentsImpl::OnDocumentLoadedInFrame(int64 frame_id) { 2147 void WebContentsImpl::OnDocumentLoadedInFrame(int64 frame_id) {
2189 controller_.DocumentLoadedInFrame(); 2148 controller_.DocumentLoadedInFrame();
2190 FOR_EACH_OBSERVER(WebContentsObserver, observers_, 2149 FOR_EACH_OBSERVER(WebContentsObserver, observers_,
2191 DocumentLoadedInFrame(frame_id, message_source_)); 2150 DocumentLoadedInFrame(frame_id, message_source_));
2192 } 2151 }
(...skipping 28 matching lines...) Expand all
2221 void WebContentsImpl::OnGoToEntryAtOffset(int offset) { 2180 void WebContentsImpl::OnGoToEntryAtOffset(int offset) {
2222 if (!delegate_ || delegate_->OnGoToEntryOffset(offset)) { 2181 if (!delegate_ || delegate_->OnGoToEntryOffset(offset)) {
2223 NavigationEntryImpl* entry = NavigationEntryImpl::FromNavigationEntry( 2182 NavigationEntryImpl* entry = NavigationEntryImpl::FromNavigationEntry(
2224 controller_.GetEntryAtOffset(offset)); 2183 controller_.GetEntryAtOffset(offset));
2225 if (!entry) 2184 if (!entry)
2226 return; 2185 return;
2227 // Note that we don't call NavigationController::GotToOffset() as we don't 2186 // Note that we don't call NavigationController::GotToOffset() as we don't
2228 // want to create a pending navigation entry (it might end up lingering 2187 // want to create a pending navigation entry (it might end up lingering
2229 // http://crbug.com/51680). 2188 // http://crbug.com/51680).
2230 entry->SetTransitionType( 2189 entry->SetTransitionType(
2231 content::PageTransitionFromInt( 2190 PageTransitionFromInt(
2232 entry->GetTransitionType() | 2191 entry->GetTransitionType() |
2233 content::PAGE_TRANSITION_FORWARD_BACK)); 2192 PAGE_TRANSITION_FORWARD_BACK));
2234 NavigateToEntry(*entry, NavigationControllerImpl::NO_RELOAD); 2193 NavigateToEntry(*entry, NavigationControllerImpl::NO_RELOAD);
2235 2194
2236 // If the entry is being restored and doesn't have a SiteInstance yet, fill 2195 // If the entry is being restored and doesn't have a SiteInstance yet, fill
2237 // it in now that we know. This allows us to find the entry when it commits. 2196 // it in now that we know. This allows us to find the entry when it commits.
2238 if (!entry->site_instance() && 2197 if (!entry->site_instance() &&
2239 entry->restore_type() != NavigationEntryImpl::RESTORE_NONE) { 2198 entry->restore_type() != NavigationEntryImpl::RESTORE_NONE) {
2240 entry->set_site_instance( 2199 entry->set_site_instance(
2241 static_cast<SiteInstanceImpl*>(GetPendingSiteInstance())); 2200 static_cast<SiteInstanceImpl*>(GetPendingSiteInstance()));
2242 } 2201 }
2243 } 2202 }
2244 } 2203 }
2245 2204
2246 void WebContentsImpl::OnUpdateZoomLimits(int minimum_percent, 2205 void WebContentsImpl::OnUpdateZoomLimits(int minimum_percent,
2247 int maximum_percent, 2206 int maximum_percent,
2248 bool remember) { 2207 bool remember) {
2249 minimum_zoom_percent_ = minimum_percent; 2208 minimum_zoom_percent_ = minimum_percent;
2250 maximum_zoom_percent_ = maximum_percent; 2209 maximum_zoom_percent_ = maximum_percent;
2251 temporary_zoom_settings_ = !remember; 2210 temporary_zoom_settings_ = !remember;
2252 } 2211 }
2253 2212
2254 void WebContentsImpl::OnSaveURL(const GURL& url, 2213 void WebContentsImpl::OnSaveURL(const GURL& url,
2255 const content::Referrer& referrer) { 2214 const Referrer& referrer) {
2256 download_stats::RecordDownloadSource( 2215 download_stats::RecordDownloadSource(
2257 download_stats::INITIATED_BY_PEPPER_SAVE); 2216 download_stats::INITIATED_BY_PEPPER_SAVE);
2258 // Check if the URL to save matches the URL of the main frame. Since this 2217 // Check if the URL to save matches the URL of the main frame. Since this
2259 // message originates from Pepper plugins, it may not be the case if the 2218 // message originates from Pepper plugins, it may not be the case if the
2260 // plugin is an embedded element. 2219 // plugin is an embedded element.
2261 GURL main_frame_url = GetURL(); 2220 GURL main_frame_url = GetURL();
2262 if (!main_frame_url.is_valid()) 2221 if (!main_frame_url.is_valid())
2263 return; 2222 return;
2264 bool is_main_frame = (url == main_frame_url); 2223 bool is_main_frame = (url == main_frame_url);
2265 SaveURL(url, referrer, is_main_frame); 2224 SaveURL(url, referrer, is_main_frame);
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
2403 // For more info, see comment above classes BrowserPluginEmbedder and 2362 // For more info, see comment above classes BrowserPluginEmbedder and
2404 // BrowserPluginGuest. 2363 // BrowserPluginGuest.
2405 // The first BrowserPluginHostMsg_CreateGuest message from this WebContents' 2364 // The first BrowserPluginHostMsg_CreateGuest message from this WebContents'
2406 // embedder render process is handled here. Once BrowserPluginEmbedder is 2365 // embedder render process is handled here. Once BrowserPluginEmbedder is
2407 // created, all subsequent BrowserPluginHostMsg_CreateGuest messages are 2366 // created, all subsequent BrowserPluginHostMsg_CreateGuest messages are
2408 // intercepted by the BrowserPluginEmbedderHelper and handled by the 2367 // intercepted by the BrowserPluginEmbedderHelper and handled by the
2409 // BrowserPluginEmbedder. Thus, this code will not be executed if a 2368 // BrowserPluginEmbedder. Thus, this code will not be executed if a
2410 // BrowserPluginEmbedder exists for this WebContents. 2369 // BrowserPluginEmbedder exists for this WebContents.
2411 CHECK(!browser_plugin_embedder_.get()); 2370 CHECK(!browser_plugin_embedder_.get());
2412 browser_plugin_embedder_.reset( 2371 browser_plugin_embedder_.reset(
2413 content::BrowserPluginEmbedder::Create(this, GetRenderViewHost())); 2372 BrowserPluginEmbedder::Create(this, GetRenderViewHost()));
2414 browser_plugin_embedder_->CreateGuest(GetRenderViewHost(), 2373 browser_plugin_embedder_->CreateGuest(GetRenderViewHost(),
2415 instance_id, 2374 instance_id,
2416 storage_partition_id, 2375 storage_partition_id,
2417 persist_storage); 2376 persist_storage);
2418 } 2377 }
2419 2378
2420 // Notifies the RenderWidgetHost instance about the fact that the page is 2379 // Notifies the RenderWidgetHost instance about the fact that the page is
2421 // loading, or done loading and calls the base implementation. 2380 // loading, or done loading and calls the base implementation.
2422 void WebContentsImpl::SetIsLoading(bool is_loading, 2381 void WebContentsImpl::SetIsLoading(bool is_loading,
2423 LoadNotificationDetails* details) { 2382 LoadNotificationDetails* details) {
2424 if (is_loading == is_loading_) 2383 if (is_loading == is_loading_)
2425 return; 2384 return;
2426 2385
2427 if (!is_loading) { 2386 if (!is_loading) {
2428 load_state_ = net::LoadStateWithParam(net::LOAD_STATE_IDLE, string16()); 2387 load_state_ = net::LoadStateWithParam(net::LOAD_STATE_IDLE, string16());
2429 load_state_host_.clear(); 2388 load_state_host_.clear();
2430 upload_size_ = 0; 2389 upload_size_ = 0;
2431 upload_position_ = 0; 2390 upload_position_ = 0;
2432 } 2391 }
2433 2392
2434 render_manager_.SetIsLoading(is_loading); 2393 render_manager_.SetIsLoading(is_loading);
2435 2394
2436 is_loading_ = is_loading; 2395 is_loading_ = is_loading;
2437 waiting_for_response_ = is_loading; 2396 waiting_for_response_ = is_loading;
2438 2397
2439 if (delegate_) 2398 if (delegate_)
2440 delegate_->LoadingStateChanged(this); 2399 delegate_->LoadingStateChanged(this);
2441 NotifyNavigationStateChanged(content::INVALIDATE_TYPE_LOAD); 2400 NotifyNavigationStateChanged(INVALIDATE_TYPE_LOAD);
2442 2401
2443 int type = is_loading ? content::NOTIFICATION_LOAD_START : 2402 int type = is_loading ? NOTIFICATION_LOAD_START : NOTIFICATION_LOAD_STOP;
2444 content::NOTIFICATION_LOAD_STOP; 2403 NotificationDetails det = NotificationService::NoDetails();
2445 content::NotificationDetails det = content::NotificationService::NoDetails();
2446 if (details) 2404 if (details)
2447 det = content::Details<LoadNotificationDetails>(details); 2405 det = Details<LoadNotificationDetails>(details);
2448 content::NotificationService::current()->Notify(type, 2406 NotificationService::current()->Notify(
2449 content::Source<NavigationController>(&controller_), 2407 type, Source<NavigationController>(&controller_), det);
2450 det);
2451 } 2408 }
2452 2409
2453 void WebContentsImpl::DidNavigateMainFramePostCommit( 2410 void WebContentsImpl::DidNavigateMainFramePostCommit(
2454 const content::LoadCommittedDetails& details, 2411 const LoadCommittedDetails& details,
2455 const ViewHostMsg_FrameNavigate_Params& params) { 2412 const ViewHostMsg_FrameNavigate_Params& params) {
2456 if (opener_web_ui_type_ != WebUI::kNoWebUI) { 2413 if (opener_web_ui_type_ != WebUI::kNoWebUI) {
2457 // If this is a window.open navigation, use the same WebUI as the renderer 2414 // If this is a window.open navigation, use the same WebUI as the renderer
2458 // that opened the window, as long as both renderers have the same 2415 // that opened the window, as long as both renderers have the same
2459 // privileges. 2416 // privileges.
2460 if (delegate_ && opener_web_ui_type_ == GetWebUITypeForCurrentState()) { 2417 if (delegate_ && opener_web_ui_type_ == GetWebUITypeForCurrentState()) {
2461 WebUIImpl* web_ui = static_cast<WebUIImpl*>(CreateWebUI(GetURL())); 2418 WebUIImpl* web_ui = static_cast<WebUIImpl*>(CreateWebUI(GetURL()));
2462 // web_ui might be NULL if the URL refers to a non-existent extension. 2419 // web_ui might be NULL if the URL refers to a non-existent extension.
2463 if (web_ui) { 2420 if (web_ui) {
2464 render_manager_.SetWebUIPostCommit(web_ui); 2421 render_manager_.SetWebUIPostCommit(web_ui);
(...skipping 19 matching lines...) Expand all
2484 displayed_insecure_content_ = false; 2441 displayed_insecure_content_ = false;
2485 } 2442 }
2486 2443
2487 // Notify observers about navigation. 2444 // Notify observers about navigation.
2488 FOR_EACH_OBSERVER(WebContentsObserver, observers_, 2445 FOR_EACH_OBSERVER(WebContentsObserver, observers_,
2489 DidNavigateMainFrame(details, params)); 2446 DidNavigateMainFrame(details, params));
2490 } 2447 }
2491 2448
2492 void WebContentsImpl::DidNavigateAnyFramePostCommit( 2449 void WebContentsImpl::DidNavigateAnyFramePostCommit(
2493 RenderViewHost* render_view_host, 2450 RenderViewHost* render_view_host,
2494 const content::LoadCommittedDetails& details, 2451 const LoadCommittedDetails& details,
2495 const ViewHostMsg_FrameNavigate_Params& params) { 2452 const ViewHostMsg_FrameNavigate_Params& params) {
2496 // If we navigate off the page, reset JavaScript state. This does nothing 2453 // If we navigate off the page, reset JavaScript state. This does nothing
2497 // to prevent a malicious script from spamming messages, since the script 2454 // to prevent a malicious script from spamming messages, since the script
2498 // could just reload the page to stop blocking. 2455 // could just reload the page to stop blocking.
2499 if (dialog_creator_ && !details.is_in_page) { 2456 if (dialog_creator_ && !details.is_in_page) {
2500 dialog_creator_->ResetJavaScriptState(this); 2457 dialog_creator_->ResetJavaScriptState(this);
2501 dialog_creator_ = NULL; 2458 dialog_creator_ = NULL;
2502 } 2459 }
2503 2460
2504 // Notify observers about navigation. 2461 // Notify observers about navigation.
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
2546 } else { 2503 } else {
2547 if (page_title_when_no_navigation_entry_ == final_title) 2504 if (page_title_when_no_navigation_entry_ == final_title)
2548 return false; // Nothing changed, don't bother. 2505 return false; // Nothing changed, don't bother.
2549 2506
2550 page_title_when_no_navigation_entry_ = final_title; 2507 page_title_when_no_navigation_entry_ = final_title;
2551 } 2508 }
2552 2509
2553 // Lastly, set the title for the view. 2510 // Lastly, set the title for the view.
2554 view_->SetPageTitle(final_title); 2511 view_->SetPageTitle(final_title);
2555 2512
2556 std::pair<content::NavigationEntry*, bool> details = 2513 std::pair<NavigationEntry*, bool> details =
2557 std::make_pair(entry, explicit_set); 2514 std::make_pair(entry, explicit_set);
2558 2515
2559 content::NotificationService::current()->Notify( 2516 NotificationService::current()->Notify(
2560 content::NOTIFICATION_WEB_CONTENTS_TITLE_UPDATED, 2517 NOTIFICATION_WEB_CONTENTS_TITLE_UPDATED,
2561 content::Source<WebContents>(this), 2518 Source<WebContents>(this),
2562 content::Details<std::pair<content::NavigationEntry*, bool> >(&details)); 2519 Details<std::pair<NavigationEntry*, bool> >(&details));
2563 2520
2564 return true; 2521 return true;
2565 } 2522 }
2566 2523
2567 void WebContentsImpl::NotifySwapped() { 2524 void WebContentsImpl::NotifySwapped() {
2568 // After sending out a swap notification, we need to send a disconnect 2525 // After sending out a swap notification, we need to send a disconnect
2569 // notification so that clients that pick up a pointer to |this| can NULL the 2526 // notification so that clients that pick up a pointer to |this| can NULL the
2570 // pointer. See Bug 1230284. 2527 // pointer. See Bug 1230284.
2571 notify_disconnection_ = true; 2528 notify_disconnection_ = true;
2572 content::NotificationService::current()->Notify( 2529 NotificationService::current()->Notify(
2573 content::NOTIFICATION_WEB_CONTENTS_SWAPPED, 2530 NOTIFICATION_WEB_CONTENTS_SWAPPED,
2574 content::Source<WebContents>(this), 2531 Source<WebContents>(this),
2575 content::NotificationService::NoDetails()); 2532 NotificationService::NoDetails());
2576 2533
2577 // Ensure that the associated embedder gets cleared after a RenderViewHost 2534 // Ensure that the associated embedder gets cleared after a RenderViewHost
2578 // gets swapped, so we don't reuse the same embedder next time a 2535 // gets swapped, so we don't reuse the same embedder next time a
2579 // RenderViewHost is attached to this WebContents. 2536 // RenderViewHost is attached to this WebContents.
2580 RemoveBrowserPluginEmbedder(); 2537 RemoveBrowserPluginEmbedder();
2581 } 2538 }
2582 2539
2583 void WebContentsImpl::NotifyConnected() { 2540 void WebContentsImpl::NotifyConnected() {
2584 notify_disconnection_ = true; 2541 notify_disconnection_ = true;
2585 content::NotificationService::current()->Notify( 2542 NotificationService::current()->Notify(
2586 content::NOTIFICATION_WEB_CONTENTS_CONNECTED, 2543 NOTIFICATION_WEB_CONTENTS_CONNECTED,
2587 content::Source<WebContents>(this), 2544 Source<WebContents>(this),
2588 content::NotificationService::NoDetails()); 2545 NotificationService::NoDetails());
2589 } 2546 }
2590 2547
2591 void WebContentsImpl::NotifyDisconnected() { 2548 void WebContentsImpl::NotifyDisconnected() {
2592 if (!notify_disconnection_) 2549 if (!notify_disconnection_)
2593 return; 2550 return;
2594 2551
2595 notify_disconnection_ = false; 2552 notify_disconnection_ = false;
2596 content::NotificationService::current()->Notify( 2553 NotificationService::current()->Notify(
2597 content::NOTIFICATION_WEB_CONTENTS_DISCONNECTED, 2554 NOTIFICATION_WEB_CONTENTS_DISCONNECTED,
2598 content::Source<WebContents>(this), 2555 Source<WebContents>(this),
2599 content::NotificationService::NoDetails()); 2556 NotificationService::NoDetails());
2600 } 2557 }
2601 2558
2602 RenderViewHostDelegateView* WebContentsImpl::GetDelegateView() { 2559 RenderViewHostDelegateView* WebContentsImpl::GetDelegateView() {
2603 return render_view_host_delegate_view_; 2560 return render_view_host_delegate_view_;
2604 } 2561 }
2605 2562
2606 RenderViewHostDelegate::RendererManagement* 2563 RenderViewHostDelegate::RendererManagement*
2607 WebContentsImpl::GetRendererManagementDelegate() { 2564 WebContentsImpl::GetRendererManagementDelegate() {
2608 return &render_manager_; 2565 return &render_manager_;
2609 } 2566 }
2610 2567
2611 content::RendererPreferences WebContentsImpl::GetRendererPrefs( 2568 RendererPreferences WebContentsImpl::GetRendererPrefs(
2612 content::BrowserContext* browser_context) const { 2569 BrowserContext* browser_context) const {
2613 return renderer_preferences_; 2570 return renderer_preferences_;
2614 } 2571 }
2615 2572
2616 WebContents* WebContentsImpl::GetAsWebContents() { 2573 WebContents* WebContentsImpl::GetAsWebContents() {
2617 return this; 2574 return this;
2618 } 2575 }
2619 2576
2620 gfx::Rect WebContentsImpl::GetRootWindowResizerRect() const { 2577 gfx::Rect WebContentsImpl::GetRootWindowResizerRect() const {
2621 if (delegate_) 2578 if (delegate_)
2622 return delegate_->GetRootWindowResizerRect(); 2579 return delegate_->GetRootWindowResizerRect();
2623 return gfx::Rect(); 2580 return gfx::Rect();
2624 } 2581 }
2625 2582
2626 void WebContentsImpl::RemoveBrowserPluginEmbedder() { 2583 void WebContentsImpl::RemoveBrowserPluginEmbedder() {
2627 if (browser_plugin_embedder_.get()) 2584 if (browser_plugin_embedder_.get())
2628 browser_plugin_embedder_.reset(); 2585 browser_plugin_embedder_.reset();
2629 } 2586 }
2630 2587
2631 void WebContentsImpl::RenderViewCreated(RenderViewHost* render_view_host) { 2588 void WebContentsImpl::RenderViewCreated(RenderViewHost* render_view_host) {
2632 // Don't send notifications if we are just creating a swapped-out RVH for 2589 // Don't send notifications if we are just creating a swapped-out RVH for
2633 // the opener chain. These won't be used for view-source or WebUI, so it's 2590 // the opener chain. These won't be used for view-source or WebUI, so it's
2634 // ok to return early. 2591 // ok to return early.
2635 if (static_cast<RenderViewHostImpl*>(render_view_host)->is_swapped_out()) 2592 if (static_cast<RenderViewHostImpl*>(render_view_host)->is_swapped_out())
2636 return; 2593 return;
2637 2594
2638 content::NotificationService::current()->Notify( 2595 NotificationService::current()->Notify(
2639 content::NOTIFICATION_WEB_CONTENTS_RENDER_VIEW_HOST_CREATED, 2596 NOTIFICATION_WEB_CONTENTS_RENDER_VIEW_HOST_CREATED,
2640 content::Source<WebContents>(this), 2597 Source<WebContents>(this),
2641 content::Details<RenderViewHost>(render_view_host)); 2598 Details<RenderViewHost>(render_view_host));
2642 NavigationEntry* entry = controller_.GetActiveEntry(); 2599 NavigationEntry* entry = controller_.GetActiveEntry();
2643 if (!entry) 2600 if (!entry)
2644 return; 2601 return;
2645 2602
2646 // When we're creating views, we're still doing initial setup, so we always 2603 // When we're creating views, we're still doing initial setup, so we always
2647 // use the pending Web UI rather than any possibly existing committed one. 2604 // use the pending Web UI rather than any possibly existing committed one.
2648 if (render_manager_.pending_web_ui()) 2605 if (render_manager_.pending_web_ui())
2649 render_manager_.pending_web_ui()->RenderViewCreated(render_view_host); 2606 render_manager_.pending_web_ui()->RenderViewCreated(render_view_host);
2650 2607
2651 if (entry->IsViewSourceMode()) { 2608 if (entry->IsViewSourceMode()) {
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
2700 } 2657 }
2701 2658
2702 void WebContentsImpl::RenderViewDeleted(RenderViewHost* rvh) { 2659 void WebContentsImpl::RenderViewDeleted(RenderViewHost* rvh) {
2703 render_manager_.RenderViewDeleted(rvh); 2660 render_manager_.RenderViewDeleted(rvh);
2704 FOR_EACH_OBSERVER(WebContentsObserver, observers_, RenderViewDeleted(rvh)); 2661 FOR_EACH_OBSERVER(WebContentsObserver, observers_, RenderViewDeleted(rvh));
2705 } 2662 }
2706 2663
2707 void WebContentsImpl::DidNavigate( 2664 void WebContentsImpl::DidNavigate(
2708 RenderViewHost* rvh, 2665 RenderViewHost* rvh,
2709 const ViewHostMsg_FrameNavigate_Params& params) { 2666 const ViewHostMsg_FrameNavigate_Params& params) {
2710 if (content::PageTransitionIsMainFrame(params.transition)) 2667 if (PageTransitionIsMainFrame(params.transition))
2711 render_manager_.DidNavigateMainFrame(rvh); 2668 render_manager_.DidNavigateMainFrame(rvh);
2712 2669
2713 // Update the site of the SiteInstance if it doesn't have one yet, unless 2670 // Update the site of the SiteInstance if it doesn't have one yet, unless
2714 // this is for about:blank. In that case, the SiteInstance can still be 2671 // this is for about:blank. In that case, the SiteInstance can still be
2715 // considered unused until a navigation to a real page. 2672 // considered unused until a navigation to a real page.
2716 if (!static_cast<SiteInstanceImpl*>(GetSiteInstance())->HasSite() && 2673 if (!static_cast<SiteInstanceImpl*>(GetSiteInstance())->HasSite() &&
2717 params.url != GURL(chrome::kAboutBlankURL)) { 2674 params.url != GURL(chrome::kAboutBlankURL)) {
2718 static_cast<SiteInstanceImpl*>(GetSiteInstance())->SetSite(params.url); 2675 static_cast<SiteInstanceImpl*>(GetSiteInstance())->SetSite(params.url);
2719 } 2676 }
2720 2677
2721 // Need to update MIME type here because it's referred to in 2678 // Need to update MIME type here because it's referred to in
2722 // UpdateNavigationCommands() called by RendererDidNavigate() to 2679 // UpdateNavigationCommands() called by RendererDidNavigate() to
2723 // determine whether or not to enable the encoding menu. 2680 // determine whether or not to enable the encoding menu.
2724 // It's updated only for the main frame. For a subframe, 2681 // It's updated only for the main frame. For a subframe,
2725 // RenderView::UpdateURL does not set params.contents_mime_type. 2682 // RenderView::UpdateURL does not set params.contents_mime_type.
2726 // (see http://code.google.com/p/chromium/issues/detail?id=2929 ) 2683 // (see http://code.google.com/p/chromium/issues/detail?id=2929 )
2727 // TODO(jungshik): Add a test for the encoding menu to avoid 2684 // TODO(jungshik): Add a test for the encoding menu to avoid
2728 // regressing it again. 2685 // regressing it again.
2729 if (content::PageTransitionIsMainFrame(params.transition)) 2686 if (PageTransitionIsMainFrame(params.transition))
2730 contents_mime_type_ = params.contents_mime_type; 2687 contents_mime_type_ = params.contents_mime_type;
2731 2688
2732 content::LoadCommittedDetails details; 2689 LoadCommittedDetails details;
2733 bool did_navigate = controller_.RendererDidNavigate(params, &details); 2690 bool did_navigate = controller_.RendererDidNavigate(params, &details);
2734 2691
2735 // Send notification about committed provisional loads. This notification is 2692 // Send notification about committed provisional loads. This notification is
2736 // different from the NAV_ENTRY_COMMITTED notification which doesn't include 2693 // different from the NAV_ENTRY_COMMITTED notification which doesn't include
2737 // the actual URL navigated to and isn't sent for AUTO_SUBFRAME navigations. 2694 // the actual URL navigated to and isn't sent for AUTO_SUBFRAME navigations.
2738 if (details.type != content::NAVIGATION_TYPE_NAV_IGNORE) { 2695 if (details.type != NAVIGATION_TYPE_NAV_IGNORE) {
2739 // For AUTO_SUBFRAME navigations, an event for the main frame is generated 2696 // For AUTO_SUBFRAME navigations, an event for the main frame is generated
2740 // that is not recorded in the navigation history. For the purpose of 2697 // that is not recorded in the navigation history. For the purpose of
2741 // tracking navigation events, we treat this event as a sub frame navigation 2698 // tracking navigation events, we treat this event as a sub frame navigation
2742 // event. 2699 // event.
2743 bool is_main_frame = did_navigate ? details.is_main_frame : false; 2700 bool is_main_frame = did_navigate ? details.is_main_frame : false;
2744 content::PageTransition transition_type = params.transition; 2701 PageTransition transition_type = params.transition;
2745 // Whether or not a page transition was triggered by going backward or 2702 // Whether or not a page transition was triggered by going backward or
2746 // forward in the history is only stored in the navigation controller's 2703 // forward in the history is only stored in the navigation controller's
2747 // entry list. 2704 // entry list.
2748 if (did_navigate && 2705 if (did_navigate &&
2749 (controller_.GetActiveEntry()->GetTransitionType() & 2706 (controller_.GetActiveEntry()->GetTransitionType() &
2750 content::PAGE_TRANSITION_FORWARD_BACK)) { 2707 PAGE_TRANSITION_FORWARD_BACK)) {
2751 transition_type = content::PageTransitionFromInt( 2708 transition_type = PageTransitionFromInt(
2752 params.transition | content::PAGE_TRANSITION_FORWARD_BACK); 2709 params.transition | PAGE_TRANSITION_FORWARD_BACK);
2753 } 2710 }
2754 // Notify observers about the commit of the provisional load. 2711 // Notify observers about the commit of the provisional load.
2755 FOR_EACH_OBSERVER(WebContentsObserver, observers_, 2712 FOR_EACH_OBSERVER(WebContentsObserver, observers_,
2756 DidCommitProvisionalLoadForFrame(params.frame_id, 2713 DidCommitProvisionalLoadForFrame(params.frame_id,
2757 is_main_frame, params.url, transition_type, rvh)); 2714 is_main_frame, params.url, transition_type, rvh));
2758 } 2715 }
2759 2716
2760 if (!did_navigate) 2717 if (!did_navigate)
2761 return; // No navigation happened. 2718 return; // No navigation happened.
2762 2719
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
2817 if (!entry && rvh != GetRenderViewHost()) 2774 if (!entry && rvh != GetRenderViewHost())
2818 return; 2775 return;
2819 2776
2820 // TODO(evan): make use of title_direction. 2777 // TODO(evan): make use of title_direction.
2821 // http://code.google.com/p/chromium/issues/detail?id=27094 2778 // http://code.google.com/p/chromium/issues/detail?id=27094
2822 if (!UpdateTitleForEntry(entry, title)) 2779 if (!UpdateTitleForEntry(entry, title))
2823 return; 2780 return;
2824 2781
2825 // Broadcast notifications when the UI should be updated. 2782 // Broadcast notifications when the UI should be updated.
2826 if (entry == controller_.GetEntryAtOffset(0)) 2783 if (entry == controller_.GetEntryAtOffset(0))
2827 NotifyNavigationStateChanged(content::INVALIDATE_TYPE_TITLE); 2784 NotifyNavigationStateChanged(INVALIDATE_TYPE_TITLE);
2828 } 2785 }
2829 2786
2830 void WebContentsImpl::UpdateEncoding(RenderViewHost* render_view_host, 2787 void WebContentsImpl::UpdateEncoding(RenderViewHost* render_view_host,
2831 const std::string& encoding) { 2788 const std::string& encoding) {
2832 SetEncoding(encoding); 2789 SetEncoding(encoding);
2833 } 2790 }
2834 2791
2835 void WebContentsImpl::UpdateTargetURL(int32 page_id, const GURL& url) { 2792 void WebContentsImpl::UpdateTargetURL(int32 page_id, const GURL& url) {
2836 if (delegate_) 2793 if (delegate_)
2837 delegate_->UpdateTargetURL(this, page_id, url); 2794 delegate_->UpdateTargetURL(this, page_id, url);
(...skipping 20 matching lines...) Expand all
2858 void WebContentsImpl::SwappedOut(RenderViewHost* rvh) { 2815 void WebContentsImpl::SwappedOut(RenderViewHost* rvh) {
2859 if (delegate_ && rvh == GetRenderViewHost()) 2816 if (delegate_ && rvh == GetRenderViewHost())
2860 delegate_->SwappedOut(this); 2817 delegate_->SwappedOut(this);
2861 } 2818 }
2862 2819
2863 void WebContentsImpl::RequestMove(const gfx::Rect& new_bounds) { 2820 void WebContentsImpl::RequestMove(const gfx::Rect& new_bounds) {
2864 if (delegate_ && delegate_->IsPopupOrPanel(this)) 2821 if (delegate_ && delegate_->IsPopupOrPanel(this))
2865 delegate_->MoveContents(this, new_bounds); 2822 delegate_->MoveContents(this, new_bounds);
2866 } 2823 }
2867 2824
2868 void WebContentsImpl::DidStartLoading( 2825 void WebContentsImpl::DidStartLoading(RenderViewHost* render_view_host) {
2869 content::RenderViewHost* render_view_host) {
2870 SetIsLoading(true, NULL); 2826 SetIsLoading(true, NULL);
2871 2827
2872 if (delegate_ && content_restrictions_) 2828 if (delegate_ && content_restrictions_)
2873 OnUpdateContentRestrictions(0); 2829 OnUpdateContentRestrictions(0);
2874 2830
2875 // Notify observers about navigation. 2831 // Notify observers about navigation.
2876 FOR_EACH_OBSERVER(WebContentsObserver, observers_, 2832 FOR_EACH_OBSERVER(WebContentsObserver, observers_,
2877 DidStartLoading(render_view_host)); 2833 DidStartLoading(render_view_host));
2878 } 2834 }
2879 2835
2880 void WebContentsImpl::DidStopLoading( 2836 void WebContentsImpl::DidStopLoading(RenderViewHost* render_view_host) {
2881 content::RenderViewHost* render_view_host) {
2882 scoped_ptr<LoadNotificationDetails> details; 2837 scoped_ptr<LoadNotificationDetails> details;
2883 2838
2884 NavigationEntry* entry = controller_.GetActiveEntry(); 2839 NavigationEntry* entry = controller_.GetActiveEntry();
2885 // An entry may not exist for a stop when loading an initial blank page or 2840 // An entry may not exist for a stop when loading an initial blank page or
2886 // if an iframe injected by script into a blank page finishes loading. 2841 // if an iframe injected by script into a blank page finishes loading.
2887 if (entry) { 2842 if (entry) {
2888 base::TimeDelta elapsed = base::TimeTicks::Now() - current_load_start_; 2843 base::TimeDelta elapsed = base::TimeTicks::Now() - current_load_start_;
2889 2844
2890 details.reset(new LoadNotificationDetails( 2845 details.reset(new LoadNotificationDetails(
2891 entry->GetVirtualURL(), 2846 entry->GetVirtualURL(),
2892 entry->GetTransitionType(), 2847 entry->GetTransitionType(),
2893 elapsed, 2848 elapsed,
2894 &controller_, 2849 &controller_,
2895 controller_.GetCurrentEntryIndex())); 2850 controller_.GetCurrentEntryIndex()));
2896 } 2851 }
2897 2852
2898 SetIsLoading(false, details.get()); 2853 SetIsLoading(false, details.get());
2899 2854
2900 // Notify observers about navigation. 2855 // Notify observers about navigation.
2901 FOR_EACH_OBSERVER(WebContentsObserver, observers_, 2856 FOR_EACH_OBSERVER(WebContentsObserver, observers_,
2902 DidStopLoading(render_view_host)); 2857 DidStopLoading(render_view_host));
2903 } 2858 }
2904 2859
2905 void WebContentsImpl::DidCancelLoading() { 2860 void WebContentsImpl::DidCancelLoading() {
2906 controller_.DiscardNonCommittedEntries(); 2861 controller_.DiscardNonCommittedEntries();
2907 2862
2908 // Update the URL display. 2863 // Update the URL display.
2909 NotifyNavigationStateChanged(content::INVALIDATE_TYPE_URL); 2864 NotifyNavigationStateChanged(INVALIDATE_TYPE_URL);
2910 } 2865 }
2911 2866
2912 void WebContentsImpl::DidChangeLoadProgress(double progress) { 2867 void WebContentsImpl::DidChangeLoadProgress(double progress) {
2913 if (delegate_) 2868 if (delegate_)
2914 delegate_->LoadProgressChanged(this, progress); 2869 delegate_->LoadProgressChanged(this, progress);
2915 } 2870 }
2916 2871
2917 void WebContentsImpl::DidUpdateFrameTree(RenderViewHost* rvh) { 2872 void WebContentsImpl::DidUpdateFrameTree(RenderViewHost* rvh) {
2918 render_manager_.DidUpdateFrameTree(rvh); 2873 render_manager_.DidUpdateFrameTree(rvh);
2919 } 2874 }
2920 2875
2921 void WebContentsImpl::DocumentAvailableInMainFrame( 2876 void WebContentsImpl::DocumentAvailableInMainFrame(
2922 RenderViewHost* render_view_host) { 2877 RenderViewHost* render_view_host) {
2923 FOR_EACH_OBSERVER(WebContentsObserver, observers_, 2878 FOR_EACH_OBSERVER(WebContentsObserver, observers_,
2924 DocumentAvailableInMainFrame()); 2879 DocumentAvailableInMainFrame());
2925 } 2880 }
2926 2881
2927 void WebContentsImpl::DocumentOnLoadCompletedInMainFrame( 2882 void WebContentsImpl::DocumentOnLoadCompletedInMainFrame(
2928 RenderViewHost* render_view_host, 2883 RenderViewHost* render_view_host,
2929 int32 page_id) { 2884 int32 page_id) {
2930 content::NotificationService::current()->Notify( 2885 NotificationService::current()->Notify(
2931 content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME, 2886 NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME,
2932 content::Source<WebContents>(this), 2887 Source<WebContents>(this),
2933 content::Details<int>(&page_id)); 2888 Details<int>(&page_id));
2934 } 2889 }
2935 2890
2936 void WebContentsImpl::RequestOpenURL(RenderViewHost* rvh, 2891 void WebContentsImpl::RequestOpenURL(RenderViewHost* rvh,
2937 const GURL& url, 2892 const GURL& url,
2938 const content::Referrer& referrer, 2893 const Referrer& referrer,
2939 WindowOpenDisposition disposition, 2894 WindowOpenDisposition disposition,
2940 int64 source_frame_id) { 2895 int64 source_frame_id) {
2941 // If this came from a swapped out RenderViewHost, we only allow the request 2896 // If this came from a swapped out RenderViewHost, we only allow the request
2942 // if we are still in the same BrowsingInstance. 2897 // if we are still in the same BrowsingInstance.
2943 if (static_cast<RenderViewHostImpl*>(rvh)->is_swapped_out() && 2898 if (static_cast<RenderViewHostImpl*>(rvh)->is_swapped_out() &&
2944 !rvh->GetSiteInstance()->IsRelatedSiteInstance(GetSiteInstance())) { 2899 !rvh->GetSiteInstance()->IsRelatedSiteInstance(GetSiteInstance())) {
2945 return; 2900 return;
2946 } 2901 }
2947 2902
2948 // Delegate to RequestTransferURL because this is just the generic 2903 // Delegate to RequestTransferURL because this is just the generic
2949 // case where |old_request_id| is empty. 2904 // case where |old_request_id| is empty.
2950 RequestTransferURL(url, referrer, disposition, source_frame_id, 2905 RequestTransferURL(url, referrer, disposition, source_frame_id,
2951 GlobalRequestID()); 2906 GlobalRequestID());
2952 } 2907 }
2953 2908
2954 void WebContentsImpl::RequestTransferURL( 2909 void WebContentsImpl::RequestTransferURL(
2955 const GURL& url, 2910 const GURL& url,
2956 const content::Referrer& referrer, 2911 const Referrer& referrer,
2957 WindowOpenDisposition disposition, 2912 WindowOpenDisposition disposition,
2958 int64 source_frame_id, 2913 int64 source_frame_id,
2959 const GlobalRequestID& old_request_id) { 2914 const GlobalRequestID& old_request_id) {
2960 WebContents* new_contents = NULL; 2915 WebContents* new_contents = NULL;
2961 content::PageTransition transition_type = content::PAGE_TRANSITION_LINK; 2916 PageTransition transition_type = PAGE_TRANSITION_LINK;
2962 if (render_manager_.web_ui()) { 2917 if (render_manager_.web_ui()) {
2963 // When we're a Web UI, it will provide a page transition type for us (this 2918 // When we're a Web UI, it will provide a page transition type for us (this
2964 // is so the new tab page can specify AUTO_BOOKMARK for automatically 2919 // is so the new tab page can specify AUTO_BOOKMARK for automatically
2965 // generated suggestions). 2920 // generated suggestions).
2966 // 2921 //
2967 // Note also that we hide the referrer for Web UI pages. We don't really 2922 // Note also that we hide the referrer for Web UI pages. We don't really
2968 // want web sites to see a referrer of "chrome://blah" (and some 2923 // want web sites to see a referrer of "chrome://blah" (and some
2969 // chrome: URLs might have search terms or other stuff we don't want to 2924 // chrome: URLs might have search terms or other stuff we don't want to
2970 // send to the site), so we send no referrer. 2925 // send to the site), so we send no referrer.
2971 OpenURLParams params(url, content::Referrer(), source_frame_id, disposition, 2926 OpenURLParams params(url, Referrer(), source_frame_id, disposition,
2972 render_manager_.web_ui()->GetLinkTransitionType(), 2927 render_manager_.web_ui()->GetLinkTransitionType(),
2973 false /* is_renderer_initiated */); 2928 false /* is_renderer_initiated */);
2974 params.transferred_global_request_id = old_request_id; 2929 params.transferred_global_request_id = old_request_id;
2975 new_contents = OpenURL(params); 2930 new_contents = OpenURL(params);
2976 transition_type = render_manager_.web_ui()->GetLinkTransitionType(); 2931 transition_type = render_manager_.web_ui()->GetLinkTransitionType();
2977 } else { 2932 } else {
2978 OpenURLParams params(url, referrer, source_frame_id, disposition, 2933 OpenURLParams params(url, referrer, source_frame_id, disposition,
2979 content::PAGE_TRANSITION_LINK, true /* is_renderer_initiated */); 2934 PAGE_TRANSITION_LINK, true /* is_renderer_initiated */);
2980 params.transferred_global_request_id = old_request_id; 2935 params.transferred_global_request_id = old_request_id;
2981 new_contents = OpenURL(params); 2936 new_contents = OpenURL(params);
2982 } 2937 }
2983 if (new_contents) { 2938 if (new_contents) {
2984 // Notify observers. 2939 // Notify observers.
2985 FOR_EACH_OBSERVER(WebContentsObserver, observers_, 2940 FOR_EACH_OBSERVER(WebContentsObserver, observers_,
2986 DidOpenRequestedURL(new_contents, 2941 DidOpenRequestedURL(new_contents,
2987 url, 2942 url,
2988 referrer, 2943 referrer,
2989 disposition, 2944 disposition,
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
3058 // It is possible to receive it from one that has just been swapped in, 3013 // It is possible to receive it from one that has just been swapped in,
3059 // in which case we might as well deliver the message anyway. 3014 // in which case we might as well deliver the message anyway.
3060 Send(new ViewMsg_PostMessageEvent(GetRoutingID(), new_params)); 3015 Send(new ViewMsg_PostMessageEvent(GetRoutingID(), new_params));
3061 } 3016 }
3062 3017
3063 void WebContentsImpl::RunJavaScriptMessage( 3018 void WebContentsImpl::RunJavaScriptMessage(
3064 RenderViewHost* rvh, 3019 RenderViewHost* rvh,
3065 const string16& message, 3020 const string16& message,
3066 const string16& default_prompt, 3021 const string16& default_prompt,
3067 const GURL& frame_url, 3022 const GURL& frame_url,
3068 content::JavaScriptMessageType javascript_message_type, 3023 JavaScriptMessageType javascript_message_type,
3069 IPC::Message* reply_msg, 3024 IPC::Message* reply_msg,
3070 bool* did_suppress_message) { 3025 bool* did_suppress_message) {
3071 // Suppress JavaScript dialogs when requested. Also suppress messages when 3026 // Suppress JavaScript dialogs when requested. Also suppress messages when
3072 // showing an interstitial as it's shown over the previous page and we don't 3027 // showing an interstitial as it's shown over the previous page and we don't
3073 // want the hidden page's dialogs to interfere with the interstitial. 3028 // want the hidden page's dialogs to interfere with the interstitial.
3074 bool suppress_this_message = 3029 bool suppress_this_message =
3075 static_cast<RenderViewHostImpl*>(rvh)->is_swapped_out() || 3030 static_cast<RenderViewHostImpl*>(rvh)->is_swapped_out() ||
3076 ShowingInterstitialPage() || 3031 ShowingInterstitialPage() ||
3077 !delegate_ || 3032 !delegate_ ||
3078 delegate_->ShouldSuppressDialogs() || 3033 delegate_->ShouldSuppressDialogs() ||
3079 !delegate_->GetJavaScriptDialogCreator(); 3034 !delegate_->GetJavaScriptDialogCreator();
3080 3035
3081 if (!suppress_this_message) { 3036 if (!suppress_this_message) {
3082 std::string accept_lang = content::GetContentClient()->browser()-> 3037 std::string accept_lang = GetContentClient()->browser()->
3083 GetAcceptLangs(GetBrowserContext()); 3038 GetAcceptLangs(GetBrowserContext());
3084 dialog_creator_ = delegate_->GetJavaScriptDialogCreator(); 3039 dialog_creator_ = delegate_->GetJavaScriptDialogCreator();
3085 dialog_creator_->RunJavaScriptDialog( 3040 dialog_creator_->RunJavaScriptDialog(
3086 this, 3041 this,
3087 frame_url.GetOrigin(), 3042 frame_url.GetOrigin(),
3088 accept_lang, 3043 accept_lang,
3089 javascript_message_type, 3044 javascript_message_type,
3090 message, 3045 message,
3091 default_prompt, 3046 default_prompt,
3092 base::Bind(&WebContentsImpl::OnDialogClosed, 3047 base::Bind(&WebContentsImpl::OnDialogClosed,
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
3144 3099
3145 WebPreferences WebContentsImpl::GetWebkitPrefs() { 3100 WebPreferences WebContentsImpl::GetWebkitPrefs() {
3146 // We want to base the page config off of the real URL, rather than the 3101 // We want to base the page config off of the real URL, rather than the
3147 // display URL. 3102 // display URL.
3148 GURL url = controller_.GetActiveEntry() 3103 GURL url = controller_.GetActiveEntry()
3149 ? controller_.GetActiveEntry()->GetURL() : GURL::EmptyGURL(); 3104 ? controller_.GetActiveEntry()->GetURL() : GURL::EmptyGURL();
3150 return GetWebkitPrefs(GetRenderViewHost(), url); 3105 return GetWebkitPrefs(GetRenderViewHost(), url);
3151 } 3106 }
3152 3107
3153 int WebContentsImpl::CreateSwappedOutRenderView( 3108 int WebContentsImpl::CreateSwappedOutRenderView(
3154 content::SiteInstance* instance) { 3109 SiteInstance* instance) {
3155 return render_manager_.CreateRenderView(instance, MSG_ROUTING_NONE, true); 3110 return render_manager_.CreateRenderView(instance, MSG_ROUTING_NONE, true);
3156 } 3111 }
3157 3112
3158 void WebContentsImpl::OnUserGesture() { 3113 void WebContentsImpl::OnUserGesture() {
3159 // Notify observers. 3114 // Notify observers.
3160 FOR_EACH_OBSERVER(WebContentsObserver, observers_, DidGetUserGesture()); 3115 FOR_EACH_OBSERVER(WebContentsObserver, observers_, DidGetUserGesture());
3161 3116
3162 ResourceDispatcherHostImpl* rdh = ResourceDispatcherHostImpl::Get(); 3117 ResourceDispatcherHostImpl* rdh = ResourceDispatcherHostImpl::Get();
3163 if (rdh) // NULL in unittests. 3118 if (rdh) // NULL in unittests.
3164 rdh->OnUserGesture(this); 3119 rdh->OnUserGesture(this);
3165 } 3120 }
3166 3121
3167 void WebContentsImpl::OnIgnoredUIEvent() { 3122 void WebContentsImpl::OnIgnoredUIEvent() {
3168 // Notify observers. 3123 // Notify observers.
3169 FOR_EACH_OBSERVER(WebContentsObserver, observers_, DidGetIgnoredUIEvent()); 3124 FOR_EACH_OBSERVER(WebContentsObserver, observers_, DidGetIgnoredUIEvent());
3170 } 3125 }
3171 3126
3172 void WebContentsImpl::RendererUnresponsive(RenderViewHost* rvh, 3127 void WebContentsImpl::RendererUnresponsive(RenderViewHost* rvh,
3173 bool is_during_unload) { 3128 bool is_during_unload) {
3174 // Don't show hung renderer dialog for a swapped out RVH. 3129 // Don't show hung renderer dialog for a swapped out RVH.
3175 if (rvh != GetRenderViewHost()) 3130 if (rvh != GetRenderViewHost())
3176 return; 3131 return;
3177 3132
3178 RenderViewHostImpl* rvhi = static_cast<RenderViewHostImpl*>(rvh); 3133 RenderViewHostImpl* rvhi = static_cast<RenderViewHostImpl*>(rvh);
3179 3134
3180 // Ignore renderer unresponsive event if debugger is attached to the tab 3135 // Ignore renderer unresponsive event if debugger is attached to the tab
3181 // since the event may be a result of the renderer sitting on a breakpoint. 3136 // since the event may be a result of the renderer sitting on a breakpoint.
3182 // See http://crbug.com/65458 3137 // See http://crbug.com/65458
3183 DevToolsAgentHost* agent = 3138 DevToolsAgentHost* agent =
3184 content::DevToolsAgentHostRegistry::GetDevToolsAgentHost(rvh); 3139 DevToolsAgentHostRegistry::GetDevToolsAgentHost(rvh);
3185 if (agent && 3140 if (agent &&
3186 DevToolsManagerImpl::GetInstance()->GetDevToolsClientHostFor(agent)) 3141 DevToolsManagerImpl::GetInstance()->GetDevToolsClientHostFor(agent))
3187 return; 3142 return;
3188 3143
3189 if (is_during_unload) { 3144 if (is_during_unload) {
3190 // Hang occurred while firing the beforeunload/unload handler. 3145 // Hang occurred while firing the beforeunload/unload handler.
3191 // Pretend the handler fired so tab closing continues as if it had. 3146 // Pretend the handler fired so tab closing continues as if it had.
3192 rvhi->set_sudden_termination_allowed(true); 3147 rvhi->set_sudden_termination_allowed(true);
3193 3148
3194 if (!render_manager_.ShouldCloseTabOnUnresponsiveRenderer()) 3149 if (!render_manager_.ShouldCloseTabOnUnresponsiveRenderer())
(...skipping 21 matching lines...) Expand all
3216 3171
3217 void WebContentsImpl::LoadStateChanged( 3172 void WebContentsImpl::LoadStateChanged(
3218 const GURL& url, 3173 const GURL& url,
3219 const net::LoadStateWithParam& load_state, 3174 const net::LoadStateWithParam& load_state,
3220 uint64 upload_position, 3175 uint64 upload_position,
3221 uint64 upload_size) { 3176 uint64 upload_size) {
3222 load_state_ = load_state; 3177 load_state_ = load_state;
3223 upload_position_ = upload_position; 3178 upload_position_ = upload_position;
3224 upload_size_ = upload_size; 3179 upload_size_ = upload_size;
3225 load_state_host_ = net::IDNToUnicode(url.host(), 3180 load_state_host_ = net::IDNToUnicode(url.host(),
3226 content::GetContentClient()->browser()->GetAcceptLangs( 3181 GetContentClient()->browser()->GetAcceptLangs(
3227 GetBrowserContext())); 3182 GetBrowserContext()));
3228 if (load_state_.state == net::LOAD_STATE_READING_RESPONSE) 3183 if (load_state_.state == net::LOAD_STATE_READING_RESPONSE)
3229 SetNotWaitingForResponse(); 3184 SetNotWaitingForResponse();
3230 if (IsLoading()) { 3185 if (IsLoading()) {
3231 NotifyNavigationStateChanged( 3186 NotifyNavigationStateChanged(INVALIDATE_TYPE_LOAD | INVALIDATE_TYPE_TAB);
3232 content::INVALIDATE_TYPE_LOAD | content::INVALIDATE_TYPE_TAB);
3233 } 3187 }
3234 } 3188 }
3235 3189
3236 void WebContentsImpl::WorkerCrashed() { 3190 void WebContentsImpl::WorkerCrashed() {
3237 if (delegate_) 3191 if (delegate_)
3238 delegate_->WorkerCrashed(this); 3192 delegate_->WorkerCrashed(this);
3239 } 3193 }
3240 3194
3241 void WebContentsImpl::BeforeUnloadFiredFromRenderManager( 3195 void WebContentsImpl::BeforeUnloadFiredFromRenderManager(
3242 bool proceed, const base::TimeTicks& proceed_time, 3196 bool proceed, const base::TimeTicks& proceed_time,
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
3364 3318
3365 close_start_time_ = base::TimeTicks(); 3319 close_start_time_ = base::TimeTicks();
3366 before_unload_end_time_ = base::TimeTicks(); 3320 before_unload_end_time_ = base::TimeTicks();
3367 } 3321 }
3368 is_showing_before_unload_dialog_ = false; 3322 is_showing_before_unload_dialog_ = false;
3369 static_cast<RenderViewHostImpl*>( 3323 static_cast<RenderViewHostImpl*>(
3370 rvh)->JavaScriptDialogClosed(reply_msg, success, user_input); 3324 rvh)->JavaScriptDialogClosed(reply_msg, success, user_input);
3371 } 3325 }
3372 3326
3373 void WebContentsImpl::SetEncoding(const std::string& encoding) { 3327 void WebContentsImpl::SetEncoding(const std::string& encoding) {
3374 encoding_ = content::GetContentClient()->browser()-> 3328 encoding_ = GetContentClient()->browser()->
3375 GetCanonicalEncodingNameByAliasName(encoding); 3329 GetCanonicalEncodingNameByAliasName(encoding);
3376 } 3330 }
3377 3331
3378 void WebContentsImpl::SaveURL(const GURL& url, 3332 void WebContentsImpl::SaveURL(const GURL& url,
3379 const content::Referrer& referrer, 3333 const Referrer& referrer,
3380 bool is_main_frame) { 3334 bool is_main_frame) {
3381 DownloadManager* dlm = 3335 DownloadManager* dlm =
3382 BrowserContext::GetDownloadManager(GetBrowserContext()); 3336 BrowserContext::GetDownloadManager(GetBrowserContext());
3383 if (!dlm) 3337 if (!dlm)
3384 return; 3338 return;
3385 int64 post_id = -1; 3339 int64 post_id = -1;
3386 if (is_main_frame) { 3340 if (is_main_frame) {
3387 const NavigationEntry* entry = controller_.GetActiveEntry(); 3341 const NavigationEntry* entry = controller_.GetActiveEntry();
3388 if (entry) 3342 if (entry)
3389 post_id = entry->GetPostID(); 3343 post_id = entry->GetPostID();
3390 } 3344 }
3391 scoped_ptr<content::DownloadSaveInfo> save_info( 3345 scoped_ptr<DownloadSaveInfo> save_info(new DownloadSaveInfo());
3392 new content::DownloadSaveInfo());
3393 save_info->prompt_for_save_location = true; 3346 save_info->prompt_for_save_location = true;
3394 scoped_ptr<DownloadUrlParameters> params( 3347 scoped_ptr<DownloadUrlParameters> params(
3395 DownloadUrlParameters::FromWebContents(this, url, save_info.Pass())); 3348 DownloadUrlParameters::FromWebContents(this, url, save_info.Pass()));
3396 params->set_referrer(referrer); 3349 params->set_referrer(referrer);
3397 params->set_post_id(post_id); 3350 params->set_post_id(post_id);
3398 params->set_prefer_cache(true); 3351 params->set_prefer_cache(true);
3399 if (post_id >= 0) 3352 if (post_id >= 0)
3400 params->set_method("POST"); 3353 params->set_method("POST");
3401 dlm->DownloadUrl(params.Pass()); 3354 dlm->DownloadUrl(params.Pass());
3402 } 3355 }
3403 3356
3404 void WebContentsImpl::CreateViewAndSetSizeForRVH(RenderViewHost* rvh) { 3357 void WebContentsImpl::CreateViewAndSetSizeForRVH(RenderViewHost* rvh) {
3405 RenderWidgetHostView* rwh_view = GetView()->CreateViewForWidget(rvh); 3358 RenderWidgetHostView* rwh_view = GetView()->CreateViewForWidget(rvh);
3406 // Can be NULL during tests. 3359 // Can be NULL during tests.
3407 if (rwh_view) 3360 if (rwh_view)
3408 rwh_view->SetSize(GetView()->GetContainerSize()); 3361 rwh_view->SetSize(GetView()->GetContainerSize());
3409 } 3362 }
3410 3363
3411 RenderViewHostImpl* WebContentsImpl::GetRenderViewHostImpl() { 3364 RenderViewHostImpl* WebContentsImpl::GetRenderViewHostImpl() {
3412 return static_cast<RenderViewHostImpl*>(GetRenderViewHost()); 3365 return static_cast<RenderViewHostImpl*>(GetRenderViewHost());
3413 } 3366 }
3414 3367
3415 void WebContentsImpl::GetBrowserPluginEmbedderInfo( 3368 void WebContentsImpl::GetBrowserPluginEmbedderInfo(
3416 content::RenderViewHost* render_view_host, 3369 RenderViewHost* render_view_host,
3417 std::string* embedder_channel_name, 3370 std::string* embedder_channel_name,
3418 int* embedder_container_id) { 3371 int* embedder_container_id) {
3419 content::RenderProcessHost* embedder_render_process_host = 3372 RenderProcessHost* embedder_render_process_host =
3420 old_browser_plugin_host()->embedder_render_process_host(); 3373 old_browser_plugin_host()->embedder_render_process_host();
3421 *embedder_container_id = old_browser_plugin_host()->instance_id(); 3374 *embedder_container_id = old_browser_plugin_host()->instance_id();
3422 int embedder_process_id = 3375 int embedder_process_id =
3423 embedder_render_process_host ? embedder_render_process_host->GetID() : -1; 3376 embedder_render_process_host ? embedder_render_process_host->GetID() : -1;
3424 if (embedder_process_id != -1) { 3377 if (embedder_process_id != -1) {
3425 *embedder_channel_name = 3378 *embedder_channel_name =
3426 StringPrintf("%d.r%d", render_view_host->GetProcess()->GetID(), 3379 StringPrintf("%d.r%d", render_view_host->GetProcess()->GetID(),
3427 embedder_process_id); 3380 embedder_process_id);
3428 } 3381 }
3429 } 3382 }
3430 3383
3431 content::BrowserPluginGuest* WebContentsImpl::GetBrowserPluginGuest() { 3384 BrowserPluginGuest* WebContentsImpl::GetBrowserPluginGuest() {
3432 return browser_plugin_guest_.get(); 3385 return browser_plugin_guest_.get();
3433 } 3386 }
3434 3387
3435 content::BrowserPluginEmbedder* WebContentsImpl::GetBrowserPluginEmbedder() { 3388 BrowserPluginEmbedder* WebContentsImpl::GetBrowserPluginEmbedder() {
3436 return browser_plugin_embedder_.get(); 3389 return browser_plugin_embedder_.get();
3437 } 3390 }
3391
3392 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/web_contents/web_contents_impl.h ('k') | content/browser/web_contents/web_contents_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698