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

Side by Side Diff: content/browser/renderer_host/render_view_host.cc

Issue 8515027: Define the public version of the browser side RenderProcessHost interface. This interface is not ... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 1 month 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/renderer_host/render_view_host.h" 5 #include "content/browser/renderer_host/render_view_host.h"
6 6
7 #include <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/command_line.h" 11 #include "base/command_line.h"
12 #include "base/i18n/rtl.h" 12 #include "base/i18n/rtl.h"
13 #include "base/json/json_reader.h" 13 #include "base/json/json_reader.h"
14 #include "base/stl_util.h" 14 #include "base/stl_util.h"
15 #include "base/string_util.h" 15 #include "base/string_util.h"
16 #include "base/time.h" 16 #include "base/time.h"
17 #include "base/utf_string_conversions.h" 17 #include "base/utf_string_conversions.h"
18 #include "base/values.h" 18 #include "base/values.h"
19 #include "content/browser/browser_context.h" 19 #include "content/browser/browser_context.h"
20 #include "content/browser/browser_message_filter.h" 20 #include "content/browser/browser_message_filter.h"
21 #include "content/browser/child_process_security_policy.h" 21 #include "content/browser/child_process_security_policy.h"
22 #include "content/browser/cross_site_request_manager.h" 22 #include "content/browser/cross_site_request_manager.h"
23 #include "content/browser/host_zoom_map.h" 23 #include "content/browser/host_zoom_map.h"
24 #include "content/browser/in_process_webkit/session_storage_namespace.h" 24 #include "content/browser/in_process_webkit/session_storage_namespace.h"
25 #include "content/browser/power_save_blocker.h" 25 #include "content/browser/power_save_blocker.h"
26 #include "content/browser/renderer_host/render_process_host.h" 26 #include "content/browser/renderer_host/render_process_host_impl.h"
27 #include "content/browser/renderer_host/render_view_host_delegate.h" 27 #include "content/browser/renderer_host/render_view_host_delegate.h"
28 #include "content/browser/renderer_host/render_view_host_observer.h" 28 #include "content/browser/renderer_host/render_view_host_observer.h"
29 #include "content/browser/renderer_host/render_widget_host.h" 29 #include "content/browser/renderer_host/render_widget_host.h"
30 #include "content/browser/renderer_host/render_widget_host_view.h" 30 #include "content/browser/renderer_host/render_widget_host_view.h"
31 #include "content/browser/site_instance.h" 31 #include "content/browser/site_instance.h"
32 #include "content/browser/user_metrics.h" 32 #include "content/browser/user_metrics.h"
33 #include "content/common/desktop_notification_messages.h" 33 #include "content/common/desktop_notification_messages.h"
34 #include "content/common/drag_messages.h" 34 #include "content/common/drag_messages.h"
35 #include "content/common/speech_input_messages.h" 35 #include "content/common/speech_input_messages.h"
36 #include "content/common/swapped_out_messages.h" 36 #include "content/common/swapped_out_messages.h"
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 is_waiting_for_beforeunload_ack_(false), 115 is_waiting_for_beforeunload_ack_(false),
116 is_waiting_for_unload_ack_(false), 116 is_waiting_for_unload_ack_(false),
117 unload_ack_is_for_cross_site_transition_(false), 117 unload_ack_is_for_cross_site_transition_(false),
118 are_javascript_messages_suppressed_(false), 118 are_javascript_messages_suppressed_(false),
119 sudden_termination_allowed_(false), 119 sudden_termination_allowed_(false),
120 session_storage_namespace_(session_storage), 120 session_storage_namespace_(session_storage),
121 save_accessibility_tree_for_testing_(false), 121 save_accessibility_tree_for_testing_(false),
122 render_view_termination_status_(base::TERMINATION_STATUS_STILL_RUNNING) { 122 render_view_termination_status_(base::TERMINATION_STATUS_STILL_RUNNING) {
123 if (!session_storage_namespace_) { 123 if (!session_storage_namespace_) {
124 session_storage_namespace_ = new SessionStorageNamespace( 124 session_storage_namespace_ = new SessionStorageNamespace(
125 process()->browser_context()->GetWebKitContext()); 125 process()->GetBrowserContext()->GetWebKitContext());
126 } 126 }
127 127
128 DCHECK(instance_); 128 DCHECK(instance_);
129 CHECK(delegate_); // http://crbug.com/82827 129 CHECK(delegate_); // http://crbug.com/82827
130 130
131 process()->EnableSendQueue(); 131 process()->EnableSendQueue();
132 132
133 content::GetContentClient()->browser()->RenderViewHostCreated(this); 133 content::GetContentClient()->browser()->RenderViewHostCreated(this);
134 134
135 content::NotificationService::current()->Notify( 135 content::NotificationService::current()->Notify(
(...skipping 10 matching lines...) Expand all
146 content::NOTIFICATION_RENDER_VIEW_HOST_DELETED, 146 content::NOTIFICATION_RENDER_VIEW_HOST_DELETED,
147 content::Source<RenderViewHost>(this), 147 content::Source<RenderViewHost>(this),
148 content::NotificationService::NoDetails()); 148 content::NotificationService::NoDetails());
149 149
150 ClearPowerSaveBlockers(); 150 ClearPowerSaveBlockers();
151 151
152 delegate()->RenderViewDeleted(this); 152 delegate()->RenderViewDeleted(this);
153 153
154 // Be sure to clean up any leftover state from cross-site requests. 154 // Be sure to clean up any leftover state from cross-site requests.
155 CrossSiteRequestManager::GetInstance()->SetHasPendingCrossSiteRequest( 155 CrossSiteRequestManager::GetInstance()->SetHasPendingCrossSiteRequest(
156 process()->id(), routing_id(), false); 156 process()->GetID(), routing_id(), false);
157 } 157 }
158 158
159 bool RenderViewHost::CreateRenderView(const string16& frame_name) { 159 bool RenderViewHost::CreateRenderView(const string16& frame_name) {
160 DCHECK(!IsRenderViewLive()) << "Creating view twice"; 160 DCHECK(!IsRenderViewLive()) << "Creating view twice";
161 161
162 // The process may (if we're sharing a process with another host that already 162 // The process may (if we're sharing a process with another host that already
163 // initialized it) or may not (we have our own process or the old process 163 // initialized it) or may not (we have our own process or the old process
164 // crashed) have been initialized. Calling Init multiple times will be 164 // crashed) have been initialized. Calling Init multiple times will be
165 // ignored, so this is safe. 165 // ignored, so this is safe.
166 if (!process()->Init(renderer_accessible())) 166 if (!process()->Init(renderer_accessible()))
167 return false; 167 return false;
168 DCHECK(process()->HasConnection()); 168 DCHECK(process()->HasConnection());
169 DCHECK(process()->browser_context()); 169 DCHECK(process()->GetBrowserContext());
170 170
171 renderer_initialized_ = true; 171 renderer_initialized_ = true;
172 172
173 process()->SetCompositingSurface(routing_id(), 173 process()->SetCompositingSurface(routing_id(),
174 GetCompositingSurface()); 174 GetCompositingSurface());
175 175
176 ViewMsg_New_Params params; 176 ViewMsg_New_Params params;
177 params.parent_window = GetNativeViewId(); 177 params.parent_window = GetNativeViewId();
178 params.renderer_preferences = 178 params.renderer_preferences =
179 delegate_->GetRendererPrefs(process()->browser_context()); 179 delegate_->GetRendererPrefs(process()->GetBrowserContext());
180 params.web_preferences = delegate_->GetWebkitPrefs(); 180 params.web_preferences = delegate_->GetWebkitPrefs();
181 params.view_id = routing_id(); 181 params.view_id = routing_id();
182 params.session_storage_namespace_id = session_storage_namespace_->id(); 182 params.session_storage_namespace_id = session_storage_namespace_->id();
183 params.frame_name = frame_name; 183 params.frame_name = frame_name;
184 Send(new ViewMsg_New(params)); 184 Send(new ViewMsg_New(params));
185 185
186 // If it's enabled, tell the renderer to set up the Javascript bindings for 186 // If it's enabled, tell the renderer to set up the Javascript bindings for
187 // sending messages back to the browser. 187 // sending messages back to the browser.
188 Send(new ViewMsg_AllowBindings(routing_id(), enabled_bindings_)); 188 Send(new ViewMsg_AllowBindings(routing_id(), enabled_bindings_));
189 // Let our delegate know that we created a RenderView. 189 // Let our delegate know that we created a RenderView.
190 delegate_->RenderViewCreated(this); 190 delegate_->RenderViewCreated(this);
191 191
192 FOR_EACH_OBSERVER( 192 FOR_EACH_OBSERVER(
193 RenderViewHostObserver, observers_, RenderViewHostInitialized()); 193 RenderViewHostObserver, observers_, RenderViewHostInitialized());
194 194
195 return true; 195 return true;
196 } 196 }
197 197
198 bool RenderViewHost::IsRenderViewLive() const { 198 bool RenderViewHost::IsRenderViewLive() const {
199 return process()->HasConnection() && renderer_initialized_; 199 return process()->HasConnection() && renderer_initialized_;
200 } 200 }
201 201
202 void RenderViewHost::SyncRendererPrefs() { 202 void RenderViewHost::SyncRendererPrefs() {
203 Send(new ViewMsg_SetRendererPrefs(routing_id(), 203 Send(new ViewMsg_SetRendererPrefs(routing_id(),
204 delegate_->GetRendererPrefs( 204 delegate_->GetRendererPrefs(
205 process()->browser_context()))); 205 process()->GetBrowserContext())));
206 } 206 }
207 207
208 void RenderViewHost::Navigate(const ViewMsg_Navigate_Params& params) { 208 void RenderViewHost::Navigate(const ViewMsg_Navigate_Params& params) {
209 ChildProcessSecurityPolicy::GetInstance()->GrantRequestURL( 209 ChildProcessSecurityPolicy::GetInstance()->GrantRequestURL(
210 process()->id(), params.url); 210 process()->GetID(), params.url);
211 211
212 ViewMsg_Navigate* nav_message = new ViewMsg_Navigate(routing_id(), params); 212 ViewMsg_Navigate* nav_message = new ViewMsg_Navigate(routing_id(), params);
213 213
214 // Only send the message if we aren't suspended at the start of a cross-site 214 // Only send the message if we aren't suspended at the start of a cross-site
215 // request. 215 // request.
216 if (navigations_suspended_) { 216 if (navigations_suspended_) {
217 // Shouldn't be possible to have a second navigation while suspended, since 217 // Shouldn't be possible to have a second navigation while suspended, since
218 // navigations will only be suspended during a cross-site request. If a 218 // navigations will only be suspended during a cross-site request. If a
219 // second navigation occurs, TabContents will cancel this pending RVH 219 // second navigation occurs, TabContents will cancel this pending RVH
220 // create a new pending RVH. 220 // create a new pending RVH.
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 // to false in SetNavigationsSuspended if we swap back in. 323 // to false in SetNavigationsSuspended if we swap back in.
324 is_swapped_out_ = true; 324 is_swapped_out_ = true;
325 325
326 // This will be set back to false in OnSwapOutACK, just before we replace 326 // This will be set back to false in OnSwapOutACK, just before we replace
327 // this RVH with the pending RVH. 327 // this RVH with the pending RVH.
328 is_waiting_for_unload_ack_ = true; 328 is_waiting_for_unload_ack_ = true;
329 // Start the hang monitor in case the renderer hangs in the unload handler. 329 // Start the hang monitor in case the renderer hangs in the unload handler.
330 StartHangMonitorTimeout(TimeDelta::FromMilliseconds(kUnloadTimeoutMS)); 330 StartHangMonitorTimeout(TimeDelta::FromMilliseconds(kUnloadTimeoutMS));
331 331
332 ViewMsg_SwapOut_Params params; 332 ViewMsg_SwapOut_Params params;
333 params.closing_process_id = process()->id(); 333 params.closing_process_id = process()->GetID();
334 params.closing_route_id = routing_id(); 334 params.closing_route_id = routing_id();
335 params.new_render_process_host_id = new_render_process_host_id; 335 params.new_render_process_host_id = new_render_process_host_id;
336 params.new_request_id = new_request_id; 336 params.new_request_id = new_request_id;
337 if (IsRenderViewLive()) { 337 if (IsRenderViewLive()) {
338 Send(new ViewMsg_SwapOut(routing_id(), params)); 338 Send(new ViewMsg_SwapOut(routing_id(), params));
339 } else { 339 } else {
340 // This RenderViewHost doesn't have a live renderer, so just skip the unload 340 // This RenderViewHost doesn't have a live renderer, so just skip the unload
341 // event. We must notify the ResourceDispatcherHost on the IO thread, 341 // event. We must notify the ResourceDispatcherHost on the IO thread,
342 // which we will do through the RenderProcessHost's widget helper. 342 // which we will do through the RenderProcessHost's widget helper.
343 process()->CrossSiteSwapOutACK(params); 343 process()->CrossSiteSwapOutACK(params);
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 is_waiting_for_beforeunload_ack_ = false; 385 is_waiting_for_beforeunload_ack_ = false;
386 is_waiting_for_unload_ack_ = false; 386 is_waiting_for_unload_ack_ = false;
387 387
388 sudden_termination_allowed_ = true; 388 sudden_termination_allowed_ = true;
389 delegate_->Close(this); 389 delegate_->Close(this);
390 } 390 }
391 391
392 void RenderViewHost::SetHasPendingCrossSiteRequest(bool has_pending_request, 392 void RenderViewHost::SetHasPendingCrossSiteRequest(bool has_pending_request,
393 int request_id) { 393 int request_id) {
394 CrossSiteRequestManager::GetInstance()->SetHasPendingCrossSiteRequest( 394 CrossSiteRequestManager::GetInstance()->SetHasPendingCrossSiteRequest(
395 process()->id(), routing_id(), has_pending_request); 395 process()->GetID(), routing_id(), has_pending_request);
396 pending_request_id_ = request_id; 396 pending_request_id_ = request_id;
397 } 397 }
398 398
399 int RenderViewHost::GetPendingRequestId() { 399 int RenderViewHost::GetPendingRequestId() {
400 return pending_request_id_; 400 return pending_request_id_;
401 } 401 }
402 402
403 void RenderViewHost::DragTargetDragEnter( 403 void RenderViewHost::DragTargetDragEnter(
404 const WebDropData& drop_data, 404 const WebDropData& drop_data,
405 const gfx::Point& client_pt, 405 const gfx::Point& client_pt,
406 const gfx::Point& screen_pt, 406 const gfx::Point& screen_pt,
407 WebDragOperationsMask operations_allowed) { 407 WebDragOperationsMask operations_allowed) {
408 // Grant the renderer the ability to load the drop_data. 408 // Grant the renderer the ability to load the drop_data.
409 ChildProcessSecurityPolicy* policy = 409 ChildProcessSecurityPolicy* policy =
410 ChildProcessSecurityPolicy::GetInstance(); 410 ChildProcessSecurityPolicy::GetInstance();
411 policy->GrantRequestURL(process()->id(), drop_data.url); 411 policy->GrantRequestURL(process()->GetID(), drop_data.url);
412 for (std::vector<string16>::const_iterator iter(drop_data.filenames.begin()); 412 for (std::vector<string16>::const_iterator iter(drop_data.filenames.begin());
413 iter != drop_data.filenames.end(); ++iter) { 413 iter != drop_data.filenames.end(); ++iter) {
414 FilePath path = FilePath::FromWStringHack(UTF16ToWideHack(*iter)); 414 FilePath path = FilePath::FromWStringHack(UTF16ToWideHack(*iter));
415 policy->GrantRequestURL(process()->id(), 415 policy->GrantRequestURL(process()->GetID(),
416 net::FilePathToFileURL(path)); 416 net::FilePathToFileURL(path));
417 policy->GrantReadFile(process()->id(), path); 417 policy->GrantReadFile(process()->GetID(), path);
418 418
419 // Allow dragged directories to be enumerated by the child process. 419 // Allow dragged directories to be enumerated by the child process.
420 // Note that we can't tell a file from a directory at this point. 420 // Note that we can't tell a file from a directory at this point.
421 policy->GrantReadDirectory(process()->id(), path); 421 policy->GrantReadDirectory(process()->GetID(), path);
422 } 422 }
423 Send(new DragMsg_TargetDragEnter(routing_id(), drop_data, client_pt, 423 Send(new DragMsg_TargetDragEnter(routing_id(), drop_data, client_pt,
424 screen_pt, operations_allowed)); 424 screen_pt, operations_allowed));
425 } 425 }
426 426
427 void RenderViewHost::DragTargetDragOver( 427 void RenderViewHost::DragTargetDragOver(
428 const gfx::Point& client_pt, const gfx::Point& screen_pt, 428 const gfx::Point& client_pt, const gfx::Point& screen_pt,
429 WebDragOperationsMask operations_allowed) { 429 WebDragOperationsMask operations_allowed) {
430 Send(new DragMsg_TargetDragOver(routing_id(), client_pt, screen_pt, 430 Send(new DragMsg_TargetDragOver(routing_id(), client_pt, screen_pt,
431 operations_allowed)); 431 operations_allowed));
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
514 &observer, content::NOTIFICATION_EXECUTE_JAVASCRIPT_RESULT, 514 &observer, content::NOTIFICATION_EXECUTE_JAVASCRIPT_RESULT,
515 content::Source<RenderViewHost>(this)); 515 content::Source<RenderViewHost>(this));
516 MessageLoop* loop = MessageLoop::current(); 516 MessageLoop* loop = MessageLoop::current();
517 loop->Run(); 517 loop->Run();
518 return observer.value()->DeepCopy(); 518 return observer.value()->DeepCopy();
519 } 519 }
520 520
521 void RenderViewHost::JavaScriptDialogClosed(IPC::Message* reply_msg, 521 void RenderViewHost::JavaScriptDialogClosed(IPC::Message* reply_msg,
522 bool success, 522 bool success,
523 const string16& user_input) { 523 const string16& user_input) {
524 process()->set_ignore_input_events(false); 524 process()->SetIgnoreInputEvents(false);
525 bool is_waiting = 525 bool is_waiting =
526 is_waiting_for_beforeunload_ack_ || is_waiting_for_unload_ack_; 526 is_waiting_for_beforeunload_ack_ || is_waiting_for_unload_ack_;
527 if (is_waiting) 527 if (is_waiting)
528 StartHangMonitorTimeout(TimeDelta::FromMilliseconds(kUnloadTimeoutMS)); 528 StartHangMonitorTimeout(TimeDelta::FromMilliseconds(kUnloadTimeoutMS));
529 529
530 ViewHostMsg_RunJavaScriptMessage::WriteReplyParams(reply_msg, 530 ViewHostMsg_RunJavaScriptMessage::WriteReplyParams(reply_msg,
531 success, user_input); 531 success, user_input);
532 Send(reply_msg); 532 Send(reply_msg);
533 533
534 // If we are waiting for an unload or beforeunload ack and the user has 534 // If we are waiting for an unload or beforeunload ack and the user has
(...skipping 25 matching lines...) Expand all
560 false, WebDragOperationNone)); 560 false, WebDragOperationNone));
561 } 561 }
562 562
563 void RenderViewHost::DragSourceSystemDragEnded() { 563 void RenderViewHost::DragSourceSystemDragEnded() {
564 Send(new DragMsg_SourceSystemDragEnded(routing_id())); 564 Send(new DragMsg_SourceSystemDragEnded(routing_id()));
565 } 565 }
566 566
567 void RenderViewHost::AllowBindings(int bindings_flags) { 567 void RenderViewHost::AllowBindings(int bindings_flags) {
568 if (bindings_flags & content::BINDINGS_POLICY_WEB_UI) { 568 if (bindings_flags & content::BINDINGS_POLICY_WEB_UI) {
569 ChildProcessSecurityPolicy::GetInstance()->GrantWebUIBindings( 569 ChildProcessSecurityPolicy::GetInstance()->GrantWebUIBindings(
570 process()->id()); 570 process()->GetID());
571 } 571 }
572 572
573 enabled_bindings_ |= bindings_flags; 573 enabled_bindings_ |= bindings_flags;
574 if (renderer_initialized_) 574 if (renderer_initialized_)
575 Send(new ViewMsg_AllowBindings(routing_id(), enabled_bindings_)); 575 Send(new ViewMsg_AllowBindings(routing_id(), enabled_bindings_));
576 } 576 }
577 577
578 void RenderViewHost::SetWebUIProperty(const std::string& name, 578 void RenderViewHost::SetWebUIProperty(const std::string& name,
579 const std::string& value) { 579 const std::string& value) {
580 DCHECK(enabled_bindings_ & content::BINDINGS_POLICY_WEB_UI); 580 DCHECK(enabled_bindings_ & content::BINDINGS_POLICY_WEB_UI);
(...skipping 22 matching lines...) Expand all
603 Send(new ViewMsg_SetInitialFocus(routing_id(), reverse)); 603 Send(new ViewMsg_SetInitialFocus(routing_id(), reverse));
604 } 604 }
605 605
606 void RenderViewHost::FilesSelectedInChooser( 606 void RenderViewHost::FilesSelectedInChooser(
607 const std::vector<FilePath>& files, 607 const std::vector<FilePath>& files,
608 int permissions) { 608 int permissions) {
609 // Grant the security access requested to the given files. 609 // Grant the security access requested to the given files.
610 for (std::vector<FilePath>::const_iterator file = files.begin(); 610 for (std::vector<FilePath>::const_iterator file = files.begin();
611 file != files.end(); ++file) { 611 file != files.end(); ++file) {
612 ChildProcessSecurityPolicy::GetInstance()->GrantPermissionsForFile( 612 ChildProcessSecurityPolicy::GetInstance()->GrantPermissionsForFile(
613 process()->id(), *file, permissions); 613 process()->GetID(), *file, permissions);
614 } 614 }
615 Send(new ViewMsg_RunFileChooserResponse(routing_id(), files)); 615 Send(new ViewMsg_RunFileChooserResponse(routing_id(), files));
616 } 616 }
617 617
618 void RenderViewHost::DirectoryEnumerationFinished( 618 void RenderViewHost::DirectoryEnumerationFinished(
619 int request_id, 619 int request_id,
620 const std::vector<FilePath>& files) { 620 const std::vector<FilePath>& files) {
621 // Grant the security access requested to the given files. 621 // Grant the security access requested to the given files.
622 for (std::vector<FilePath>::const_iterator file = files.begin(); 622 for (std::vector<FilePath>::const_iterator file = files.begin();
623 file != files.end(); ++file) { 623 file != files.end(); ++file) {
624 ChildProcessSecurityPolicy::GetInstance()->GrantReadFile( 624 ChildProcessSecurityPolicy::GetInstance()->GrantReadFile(
625 process()->id(), *file); 625 process()->GetID(), *file);
626 } 626 }
627 Send(new ViewMsg_EnumerateDirectoryResponse(routing_id(), 627 Send(new ViewMsg_EnumerateDirectoryResponse(routing_id(),
628 request_id, 628 request_id,
629 files)); 629 files));
630 } 630 }
631 631
632 void RenderViewHost::LoadStateChanged(const GURL& url, 632 void RenderViewHost::LoadStateChanged(const GURL& url,
633 const net::LoadStateWithParam& load_state, 633 const net::LoadStateWithParam& load_state,
634 uint64 upload_position, 634 uint64 upload_position,
635 uint64 upload_size) { 635 uint64 upload_size) {
636 delegate_->LoadStateChanged(url, load_state, upload_position, upload_size); 636 delegate_->LoadStateChanged(url, load_state, upload_position, upload_size);
637 } 637 }
638 638
639 bool RenderViewHost::SuddenTerminationAllowed() const { 639 bool RenderViewHost::SuddenTerminationAllowed() const {
640 return sudden_termination_allowed_ || process()->sudden_termination_allowed(); 640 return sudden_termination_allowed_ || process()->SuddenTerminationAllowed();
641 } 641 }
642 642
643 /////////////////////////////////////////////////////////////////////////////// 643 ///////////////////////////////////////////////////////////////////////////////
644 // RenderViewHost, IPC message handlers: 644 // RenderViewHost, IPC message handlers:
645 645
646 bool RenderViewHost::OnMessageReceived(const IPC::Message& msg) { 646 bool RenderViewHost::OnMessageReceived(const IPC::Message& msg) {
647 if (!BrowserMessageFilter::CheckCanDispatchOnUI(msg, this)) 647 if (!BrowserMessageFilter::CheckCanDispatchOnUI(msg, this))
648 return true; 648 return true;
649 649
650 // Filter out most IPC messages if this renderer is swapped out. 650 // Filter out most IPC messages if this renderer is swapped out.
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
876 } 876 }
877 877
878 // If we're waiting for an unload ack from this renderer and we receive a 878 // If we're waiting for an unload ack from this renderer and we receive a
879 // Navigate message, then the renderer was navigating before it received the 879 // Navigate message, then the renderer was navigating before it received the
880 // unload request. It will either respond to the unload request soon or our 880 // unload request. It will either respond to the unload request soon or our
881 // timer will expire. Either way, we should ignore this message, because we 881 // timer will expire. Either way, we should ignore this message, because we
882 // have already committed to closing this renderer. 882 // have already committed to closing this renderer.
883 if (is_waiting_for_unload_ack_) 883 if (is_waiting_for_unload_ack_)
884 return; 884 return;
885 885
886 const int renderer_id = process()->id(); 886 const int renderer_id = process()->GetID();
887 ChildProcessSecurityPolicy* policy = 887 ChildProcessSecurityPolicy* policy =
888 ChildProcessSecurityPolicy::GetInstance(); 888 ChildProcessSecurityPolicy::GetInstance();
889 // Without this check, an evil renderer can trick the browser into creating 889 // Without this check, an evil renderer can trick the browser into creating
890 // a navigation entry for a banned URL. If the user clicks the back button 890 // a navigation entry for a banned URL. If the user clicks the back button
891 // followed by the forward button (or clicks reload, or round-trips through 891 // followed by the forward button (or clicks reload, or round-trips through
892 // session restore, etc), we'll think that the browser commanded the 892 // session restore, etc), we'll think that the browser commanded the
893 // renderer to load the URL and grant the renderer the privileges to request 893 // renderer to load the URL and grant the renderer the privileges to request
894 // the URL. To prevent this attack, we block the renderer from inserting 894 // the URL. To prevent this attack, we block the renderer from inserting
895 // banned URLs into the navigation controller in the first place. 895 // banned URLs into the navigation controller in the first place.
896 FilterURL(policy, renderer_id, &validated_params.url); 896 FilterURL(policy, renderer_id, &validated_params.url);
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
978 } 978 }
979 979
980 void RenderViewHost::OnMsgContextMenu(const ContextMenuParams& params) { 980 void RenderViewHost::OnMsgContextMenu(const ContextMenuParams& params) {
981 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); 981 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate();
982 if (!view) 982 if (!view)
983 return; 983 return;
984 984
985 // Validate the URLs in |params|. If the renderer can't request the URLs 985 // Validate the URLs in |params|. If the renderer can't request the URLs
986 // directly, don't show them in the context menu. 986 // directly, don't show them in the context menu.
987 ContextMenuParams validated_params(params); 987 ContextMenuParams validated_params(params);
988 int renderer_id = process()->id(); 988 int renderer_id = process()->GetID();
989 ChildProcessSecurityPolicy* policy = 989 ChildProcessSecurityPolicy* policy =
990 ChildProcessSecurityPolicy::GetInstance(); 990 ChildProcessSecurityPolicy::GetInstance();
991 991
992 // We don't validate |unfiltered_link_url| so that this field can be used 992 // We don't validate |unfiltered_link_url| so that this field can be used
993 // when users want to copy the original link URL. 993 // when users want to copy the original link URL.
994 FilterURL(policy, renderer_id, &validated_params.link_url); 994 FilterURL(policy, renderer_id, &validated_params.link_url);
995 FilterURL(policy, renderer_id, &validated_params.src_url); 995 FilterURL(policy, renderer_id, &validated_params.src_url);
996 FilterURL(policy, renderer_id, &validated_params.page_url); 996 FilterURL(policy, renderer_id, &validated_params.page_url);
997 FilterURL(policy, renderer_id, &validated_params.frame_url); 997 FilterURL(policy, renderer_id, &validated_params.frame_url);
998 998
999 view->ShowContextMenu(validated_params); 999 view->ShowContextMenu(validated_params);
1000 } 1000 }
1001 1001
1002 void RenderViewHost::OnMsgToggleFullscreen(bool enter_fullscreen) { 1002 void RenderViewHost::OnMsgToggleFullscreen(bool enter_fullscreen) {
1003 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1003 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1004 delegate_->ToggleFullscreenMode(enter_fullscreen); 1004 delegate_->ToggleFullscreenMode(enter_fullscreen);
1005 } 1005 }
1006 1006
1007 void RenderViewHost::OnMsgOpenURL(const GURL& url, 1007 void RenderViewHost::OnMsgOpenURL(const GURL& url,
1008 const GURL& referrer, 1008 const GURL& referrer,
1009 WindowOpenDisposition disposition, 1009 WindowOpenDisposition disposition,
1010 int64 source_frame_id) { 1010 int64 source_frame_id) {
1011 GURL validated_url(url); 1011 GURL validated_url(url);
1012 FilterURL(ChildProcessSecurityPolicy::GetInstance(), 1012 FilterURL(ChildProcessSecurityPolicy::GetInstance(),
1013 process()->id(), &validated_url); 1013 process()->GetID(), &validated_url);
1014 1014
1015 delegate_->RequestOpenURL( 1015 delegate_->RequestOpenURL(
1016 validated_url, referrer, disposition, source_frame_id); 1016 validated_url, referrer, disposition, source_frame_id);
1017 } 1017 }
1018 1018
1019 void RenderViewHost::OnMsgDidContentsPreferredSizeChange( 1019 void RenderViewHost::OnMsgDidContentsPreferredSizeChange(
1020 const gfx::Size& new_size) { 1020 const gfx::Size& new_size) {
1021 delegate_->UpdatePreferredSize(new_size); 1021 delegate_->UpdatePreferredSize(new_size);
1022 } 1022 }
1023 1023
(...skipping 27 matching lines...) Expand all
1051 } 1051 }
1052 1052
1053 void RenderViewHost::OnMsgRunJavaScriptMessage( 1053 void RenderViewHost::OnMsgRunJavaScriptMessage(
1054 const string16& message, 1054 const string16& message,
1055 const string16& default_prompt, 1055 const string16& default_prompt,
1056 const GURL& frame_url, 1056 const GURL& frame_url,
1057 const int flags, 1057 const int flags,
1058 IPC::Message* reply_msg) { 1058 IPC::Message* reply_msg) {
1059 // While a JS message dialog is showing, tabs in the same process shouldn't 1059 // While a JS message dialog is showing, tabs in the same process shouldn't
1060 // process input events. 1060 // process input events.
1061 process()->set_ignore_input_events(true); 1061 process()->SetIgnoreInputEvents(true);
1062 StopHangMonitorTimeout(); 1062 StopHangMonitorTimeout();
1063 delegate_->RunJavaScriptMessage(this, message, default_prompt, frame_url, 1063 delegate_->RunJavaScriptMessage(this, message, default_prompt, frame_url,
1064 flags, reply_msg, 1064 flags, reply_msg,
1065 &are_javascript_messages_suppressed_); 1065 &are_javascript_messages_suppressed_);
1066 } 1066 }
1067 1067
1068 void RenderViewHost::OnMsgRunBeforeUnloadConfirm(const GURL& frame_url, 1068 void RenderViewHost::OnMsgRunBeforeUnloadConfirm(const GURL& frame_url,
1069 const string16& message, 1069 const string16& message,
1070 IPC::Message* reply_msg) { 1070 IPC::Message* reply_msg) {
1071 // While a JS before unload dialog is showing, tabs in the same process 1071 // While a JS before unload dialog is showing, tabs in the same process
1072 // shouldn't process input events. 1072 // shouldn't process input events.
1073 process()->set_ignore_input_events(true); 1073 process()->SetIgnoreInputEvents(true);
1074 StopHangMonitorTimeout(); 1074 StopHangMonitorTimeout();
1075 delegate_->RunBeforeUnloadConfirm(this, message, reply_msg); 1075 delegate_->RunBeforeUnloadConfirm(this, message, reply_msg);
1076 } 1076 }
1077 1077
1078 void RenderViewHost::OnMsgStartDragging( 1078 void RenderViewHost::OnMsgStartDragging(
1079 const WebDropData& drop_data, 1079 const WebDropData& drop_data,
1080 WebDragOperationsMask drag_operations_mask, 1080 WebDragOperationsMask drag_operations_mask,
1081 const SkBitmap& image, 1081 const SkBitmap& image,
1082 const gfx::Point& image_offset) { 1082 const gfx::Point& image_offset) {
1083 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); 1083 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate();
1084 if (!view) 1084 if (!view)
1085 return; 1085 return;
1086 1086
1087 GURL drag_url = drop_data.url; 1087 GURL drag_url = drop_data.url;
1088 GURL html_base_url = drop_data.html_base_url; 1088 GURL html_base_url = drop_data.html_base_url;
1089 1089
1090 ChildProcessSecurityPolicy* policy = 1090 ChildProcessSecurityPolicy* policy =
1091 ChildProcessSecurityPolicy::GetInstance(); 1091 ChildProcessSecurityPolicy::GetInstance();
1092 1092
1093 // Allow drag of Javascript URLs to enable bookmarklet drag to bookmark bar. 1093 // Allow drag of Javascript URLs to enable bookmarklet drag to bookmark bar.
1094 if (!drag_url.SchemeIs(chrome::kJavaScriptScheme)) 1094 if (!drag_url.SchemeIs(chrome::kJavaScriptScheme))
1095 FilterURL(policy, process()->id(), &drag_url); 1095 FilterURL(policy, process()->GetID(), &drag_url);
1096 FilterURL(policy, process()->id(), &html_base_url); 1096 FilterURL(policy, process()->GetID(), &html_base_url);
1097 1097
1098 if (drag_url != drop_data.url || html_base_url != drop_data.html_base_url) { 1098 if (drag_url != drop_data.url || html_base_url != drop_data.html_base_url) {
1099 WebDropData drop_data_copy = drop_data; 1099 WebDropData drop_data_copy = drop_data;
1100 drop_data_copy.url = drag_url; 1100 drop_data_copy.url = drag_url;
1101 drop_data_copy.html_base_url = html_base_url; 1101 drop_data_copy.html_base_url = html_base_url;
1102 view->StartDragging(drop_data_copy, drag_operations_mask, image, 1102 view->StartDragging(drop_data_copy, drag_operations_mask, image,
1103 image_offset); 1103 image_offset);
1104 } else { 1104 } else {
1105 view->StartDragging(drop_data, drag_operations_mask, image, image_offset); 1105 view->StartDragging(drop_data, drag_operations_mask, image, image_offset);
1106 } 1106 }
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after
1403 content::NotificationService::current()->Notify( 1403 content::NotificationService::current()->Notify(
1404 content::NOTIFICATION_EXECUTE_JAVASCRIPT_RESULT, 1404 content::NOTIFICATION_EXECUTE_JAVASCRIPT_RESULT,
1405 content::Source<RenderViewHost>(this), 1405 content::Source<RenderViewHost>(this),
1406 content::Details<std::pair<int, Value*> >(&details)); 1406 content::Details<std::pair<int, Value*> >(&details));
1407 } 1407 }
1408 1408
1409 void RenderViewHost::OnDidZoomURL(double zoom_level, 1409 void RenderViewHost::OnDidZoomURL(double zoom_level,
1410 bool remember, 1410 bool remember,
1411 const GURL& url) { 1411 const GURL& url) {
1412 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1412 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1413 HostZoomMap* host_zoom_map = process()->browser_context()->GetHostZoomMap(); 1413 HostZoomMap* host_zoom_map = process()->GetBrowserContext()->
1414 GetHostZoomMap();
1414 if (remember) { 1415 if (remember) {
1415 host_zoom_map->SetZoomLevel(net::GetHostOrSpecFromURL(url), zoom_level); 1416 host_zoom_map->SetZoomLevel(net::GetHostOrSpecFromURL(url), zoom_level);
1416 // Notify renderers from this browser context. 1417 // Notify renderers from this browser context.
1417 for (RenderProcessHost::iterator i(RenderProcessHost::AllHostsIterator()); 1418 for (RenderProcessHost::iterator i(RenderProcessHost::AllHostsIterator());
1418 !i.IsAtEnd(); i.Advance()) { 1419 !i.IsAtEnd(); i.Advance()) {
1419 RenderProcessHost* render_process_host = i.GetCurrentValue(); 1420 RenderProcessHost* render_process_host = i.GetCurrentValue();
1420 if (render_process_host->browser_context()->GetHostZoomMap()-> 1421 if (render_process_host->GetBrowserContext()->GetHostZoomMap()->
1421 GetOriginal() == host_zoom_map) { 1422 GetOriginal() == host_zoom_map) {
1422 render_process_host->Send( 1423 render_process_host->Send(
1423 new ViewMsg_SetZoomLevelForCurrentURL(url, zoom_level)); 1424 new ViewMsg_SetZoomLevelForCurrentURL(url, zoom_level));
1424 } 1425 }
1425 } 1426 }
1426 } else { 1427 } else {
1427 host_zoom_map->SetTemporaryZoomLevel( 1428 host_zoom_map->SetTemporaryZoomLevel(
1428 process()->id(), routing_id(), zoom_level); 1429 process()->GetID(), routing_id(), zoom_level);
1429 } 1430 }
1430 } 1431 }
1431 1432
1432 void RenderViewHost::OnMediaNotification(int64 player_cookie, 1433 void RenderViewHost::OnMediaNotification(int64 player_cookie,
1433 bool has_video, 1434 bool has_video,
1434 bool has_audio, 1435 bool has_audio,
1435 bool is_playing) { 1436 bool is_playing) {
1436 if (is_playing) { 1437 if (is_playing) {
1437 PowerSaveBlocker* blocker = NULL; 1438 PowerSaveBlocker* blocker = NULL;
1438 if (has_video) { 1439 if (has_video) {
1439 blocker = new PowerSaveBlocker( 1440 blocker = new PowerSaveBlocker(
1440 PowerSaveBlocker::kPowerSaveBlockPreventDisplaySleep); 1441 PowerSaveBlocker::kPowerSaveBlockPreventDisplaySleep);
1441 } else if (has_audio) { 1442 } else if (has_audio) {
1442 blocker = new PowerSaveBlocker( 1443 blocker = new PowerSaveBlocker(
1443 PowerSaveBlocker::kPowerSaveBlockPreventSystemSleep); 1444 PowerSaveBlocker::kPowerSaveBlockPreventSystemSleep);
1444 } 1445 }
1445 1446
1446 if (blocker) 1447 if (blocker)
1447 power_save_blockers_[player_cookie] = blocker; 1448 power_save_blockers_[player_cookie] = blocker;
1448 } else { 1449 } else {
1449 delete power_save_blockers_[player_cookie]; 1450 delete power_save_blockers_[player_cookie];
1450 power_save_blockers_.erase(player_cookie); 1451 power_save_blockers_.erase(player_cookie);
1451 } 1452 }
1452 } 1453 }
1453 1454
1454 void RenderViewHost::OnRequestDesktopNotificationPermission( 1455 void RenderViewHost::OnRequestDesktopNotificationPermission(
1455 const GURL& source_origin, int callback_context) { 1456 const GURL& source_origin, int callback_context) {
1456 content::GetContentClient()->browser()->RequestDesktopNotificationPermission( 1457 content::GetContentClient()->browser()->RequestDesktopNotificationPermission(
1457 source_origin, callback_context, process()->id(), routing_id()); 1458 source_origin, callback_context, process()->GetID(), routing_id());
1458 } 1459 }
1459 1460
1460 void RenderViewHost::OnShowDesktopNotification( 1461 void RenderViewHost::OnShowDesktopNotification(
1461 const content::ShowDesktopNotificationHostMsgParams& params) { 1462 const content::ShowDesktopNotificationHostMsgParams& params) {
1462 // Disallow HTML notifications from javascript: and file: schemes as this 1463 // Disallow HTML notifications from javascript: and file: schemes as this
1463 // allows unwanted cross-domain access. 1464 // allows unwanted cross-domain access.
1464 GURL url = params.contents_url; 1465 GURL url = params.contents_url;
1465 if (params.is_html && 1466 if (params.is_html &&
1466 (url.SchemeIs(chrome::kJavaScriptScheme) || 1467 (url.SchemeIs(chrome::kJavaScriptScheme) ||
1467 url.SchemeIs(chrome::kFileScheme))) { 1468 url.SchemeIs(chrome::kFileScheme))) {
1468 return; 1469 return;
1469 } 1470 }
1470 1471
1471 content::GetContentClient()->browser()->ShowDesktopNotification( 1472 content::GetContentClient()->browser()->ShowDesktopNotification(
1472 params, process()->id(), routing_id(), false); 1473 params, process()->GetID(), routing_id(), false);
1473 } 1474 }
1474 1475
1475 void RenderViewHost::OnCancelDesktopNotification(int notification_id) { 1476 void RenderViewHost::OnCancelDesktopNotification(int notification_id) {
1476 content::GetContentClient()->browser()->CancelDesktopNotification( 1477 content::GetContentClient()->browser()->CancelDesktopNotification(
1477 process()->id(), routing_id(), notification_id); 1478 process()->GetID(), routing_id(), notification_id);
1478 } 1479 }
1479 1480
1480 #if defined(OS_MACOSX) 1481 #if defined(OS_MACOSX)
1481 void RenderViewHost::OnMsgShowPopup( 1482 void RenderViewHost::OnMsgShowPopup(
1482 const ViewHostMsg_ShowPopup_Params& params) { 1483 const ViewHostMsg_ShowPopup_Params& params) {
1483 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); 1484 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate();
1484 if (view) { 1485 if (view) {
1485 view->ShowPopupMenu(params.bounds, 1486 view->ShowPopupMenu(params.bounds,
1486 params.item_height, 1487 params.item_height,
1487 params.item_font_size, 1488 params.item_font_size,
(...skipping 11 matching lines...) Expand all
1499 1500
1500 void RenderViewHost::OnWebUISend(const GURL& source_url, 1501 void RenderViewHost::OnWebUISend(const GURL& source_url,
1501 const std::string& name, 1502 const std::string& name,
1502 const base::ListValue& args) { 1503 const base::ListValue& args) {
1503 delegate_->WebUISend(this, source_url, name, args); 1504 delegate_->WebUISend(this, source_url, name, args);
1504 } 1505 }
1505 1506
1506 void RenderViewHost::ClearPowerSaveBlockers() { 1507 void RenderViewHost::ClearPowerSaveBlockers() {
1507 STLDeleteValues(&power_save_blockers_); 1508 STLDeleteValues(&power_save_blockers_);
1508 } 1509 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698