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

Side by Side Diff: content/renderer/render_view_impl.cc

Issue 9968097: Browser Plugin: Renderer-side changes (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Removed unnecessary include and forward declaration. Created 8 years, 8 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/renderer/render_view_impl.h" 5 #include "content/renderer/render_view_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 #include "content/public/common/content_switches.h" 46 #include "content/public/common/content_switches.h"
47 #include "content/public/common/context_menu_params.h" 47 #include "content/public/common/context_menu_params.h"
48 #include "content/public/common/file_chooser_params.h" 48 #include "content/public/common/file_chooser_params.h"
49 #include "content/public/common/selected_file_info.h" 49 #include "content/public/common/selected_file_info.h"
50 #include "content/public/common/url_constants.h" 50 #include "content/public/common/url_constants.h"
51 #include "content/public/renderer/content_renderer_client.h" 51 #include "content/public/renderer/content_renderer_client.h"
52 #include "content/public/renderer/document_state.h" 52 #include "content/public/renderer/document_state.h"
53 #include "content/public/renderer/navigation_state.h" 53 #include "content/public/renderer/navigation_state.h"
54 #include "content/public/renderer/render_view_observer.h" 54 #include "content/public/renderer/render_view_observer.h"
55 #include "content/public/renderer/render_view_visitor.h" 55 #include "content/public/renderer/render_view_visitor.h"
56 #include "content/renderer/browser_plugin/guest_render_view_observer.h"
56 #include "content/renderer/device_orientation_dispatcher.h" 57 #include "content/renderer/device_orientation_dispatcher.h"
57 #include "content/renderer/devtools_agent.h" 58 #include "content/renderer/devtools_agent.h"
58 #include "content/renderer/dom_automation_controller.h" 59 #include "content/renderer/dom_automation_controller.h"
59 #include "content/renderer/external_popup_menu.h" 60 #include "content/renderer/external_popup_menu.h"
60 #include "content/renderer/geolocation_dispatcher.h" 61 #include "content/renderer/geolocation_dispatcher.h"
61 #include "content/renderer/gpu/compositor_thread.h" 62 #include "content/renderer/gpu/compositor_thread.h"
62 #include "content/renderer/idle_user_detector.h" 63 #include "content/renderer/idle_user_detector.h"
63 #include "content/renderer/input_tag_speech_dispatcher.h" 64 #include "content/renderer/input_tag_speech_dispatcher.h"
64 #include "content/renderer/java/java_bridge_dispatcher.h" 65 #include "content/renderer/java/java_bridge_dispatcher.h"
65 #include "content/renderer/load_progress_tracker.h" 66 #include "content/renderer/load_progress_tracker.h"
(...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after
447 selection_text_offset_(0), 448 selection_text_offset_(0),
448 cached_is_main_frame_pinned_to_left_(false), 449 cached_is_main_frame_pinned_to_left_(false),
449 cached_is_main_frame_pinned_to_right_(false), 450 cached_is_main_frame_pinned_to_right_(false),
450 cached_has_main_frame_horizontal_scrollbar_(false), 451 cached_has_main_frame_horizontal_scrollbar_(false),
451 cached_has_main_frame_vertical_scrollbar_(false), 452 cached_has_main_frame_vertical_scrollbar_(false),
452 context_has_swapbuffers_complete_callback_(false), 453 context_has_swapbuffers_complete_callback_(false),
453 queried_for_swapbuffers_complete_callback_(false), 454 queried_for_swapbuffers_complete_callback_(false),
454 context_is_web_graphics_context_3d_command_buffer_impl_(false), 455 context_is_web_graphics_context_3d_command_buffer_impl_(false),
455 ALLOW_THIS_IN_INITIALIZER_LIST(cookie_jar_(this)), 456 ALLOW_THIS_IN_INITIALIZER_LIST(cookie_jar_(this)),
456 geolocation_dispatcher_(NULL), 457 geolocation_dispatcher_(NULL),
458 guest_observer_(NULL),
457 input_tag_speech_dispatcher_(NULL), 459 input_tag_speech_dispatcher_(NULL),
458 device_orientation_dispatcher_(NULL), 460 device_orientation_dispatcher_(NULL),
459 media_stream_dispatcher_(NULL), 461 media_stream_dispatcher_(NULL),
460 p2p_socket_dispatcher_(NULL), 462 p2p_socket_dispatcher_(NULL),
461 devtools_agent_(NULL), 463 devtools_agent_(NULL),
462 renderer_accessibility_(NULL), 464 renderer_accessibility_(NULL),
463 mouse_lock_dispatcher_(NULL), 465 mouse_lock_dispatcher_(NULL),
464 session_storage_namespace_id_(session_storage_namespace_id), 466 session_storage_namespace_id_(session_storage_namespace_id),
465 handling_select_range_(false), 467 handling_select_range_(false),
466 #if defined(OS_WIN) 468 #if defined(OS_WIN)
(...skipping 27 matching lines...) Expand all
494 decrement_shared_popup_at_destruction_ = false; 496 decrement_shared_popup_at_destruction_ = false;
495 } 497 }
496 498
497 RenderThread::Get()->AddRoute(routing_id_, this); 499 RenderThread::Get()->AddRoute(routing_id_, this);
498 // Take a reference on behalf of the RenderThread. This will be balanced 500 // Take a reference on behalf of the RenderThread. This will be balanced
499 // when we receive ViewMsg_ClosePage. 501 // when we receive ViewMsg_ClosePage.
500 AddRef(); 502 AddRef();
501 503
502 // If this is a popup, we must wait for the CreatingNew_ACK message before 504 // If this is a popup, we must wait for the CreatingNew_ACK message before
503 // completing initialization. Otherwise, we can finish it now. 505 // completing initialization. Otherwise, we can finish it now.
504 if (opener_id == MSG_ROUTING_NONE) { 506 if (!guest_ && opener_id == MSG_ROUTING_NONE) {
505 did_show_ = true; 507 did_show_ = true;
506 CompleteInit(parent_hwnd); 508 CompleteInit(parent_hwnd);
507 } 509 }
508 510
509 g_view_map.Get().insert(std::make_pair(webview(), this)); 511 g_view_map.Get().insert(std::make_pair(webview(), this));
510 webkit_preferences_.Apply(webview()); 512 webkit_preferences_.Apply(webview());
513
514 // This needs to be before initializeMainFrame it seems.
515 // PpapiMsg_CreateChannel messages can get lost if the guest
516 // observer has not been constructed before a sync message.
517 if (!guest_observer_)
jam 2012/04/06 21:05:23 you're in the constructor, so how else would guest
Fady Samuel 2012/04/06 22:46:32 Doh! Lots of unnecessary code sticks around as one
518 guest_observer_ = new GuestRenderViewObserver(this);
519
511 webview()->initializeMainFrame(this); 520 webview()->initializeMainFrame(this);
512 if (!frame_name.empty()) 521 if (!frame_name.empty())
513 webview()->mainFrame()->setName(frame_name); 522 webview()->mainFrame()->setName(frame_name);
514 webview()->settings()->setMinimumTimerInterval( 523 webview()->settings()->setMinimumTimerInterval(
515 is_hidden() ? webkit_glue::kBackgroundTabTimerInterval : 524 is_hidden() ? webkit_glue::kBackgroundTabTimerInterval :
516 webkit_glue::kForegroundTabTimerInterval); 525 webkit_glue::kForegroundTabTimerInterval);
517 526
518 OnSetRendererPrefs(renderer_prefs); 527 OnSetRendererPrefs(renderer_prefs);
519 528
520 host_window_ = parent_hwnd; 529 host_window_ = parent_hwnd;
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
831 IPC_MESSAGE_HANDLER(ViewMsg_SetInLiveResize, OnSetInLiveResize) 840 IPC_MESSAGE_HANDLER(ViewMsg_SetInLiveResize, OnSetInLiveResize)
832 #endif 841 #endif
833 IPC_MESSAGE_HANDLER(ViewMsg_SetHistoryLengthAndPrune, 842 IPC_MESSAGE_HANDLER(ViewMsg_SetHistoryLengthAndPrune,
834 OnSetHistoryLengthAndPrune) 843 OnSetHistoryLengthAndPrune)
835 IPC_MESSAGE_HANDLER(ViewMsg_EnableViewSourceMode, OnEnableViewSourceMode) 844 IPC_MESSAGE_HANDLER(ViewMsg_EnableViewSourceMode, OnEnableViewSourceMode)
836 IPC_MESSAGE_HANDLER(JavaBridgeMsg_Init, OnJavaBridgeInit) 845 IPC_MESSAGE_HANDLER(JavaBridgeMsg_Init, OnJavaBridgeInit)
837 846
838 // Have the super handle all other messages. 847 // Have the super handle all other messages.
839 IPC_MESSAGE_UNHANDLED(handled = RenderWidget::OnMessageReceived(message)) 848 IPC_MESSAGE_UNHANDLED(handled = RenderWidget::OnMessageReceived(message))
840 IPC_END_MESSAGE_MAP() 849 IPC_END_MESSAGE_MAP()
841
842 if (!msg_is_ok) { 850 if (!msg_is_ok) {
843 // The message had a handler, but its deserialization failed. 851 // The message had a handler, but its deserialization failed.
844 // Kill the renderer to avoid potential spoofing attacks. 852 // Kill the renderer to avoid potential spoofing attacks.
845 CHECK(false) << "Unable to deserialize message in RenderViewImpl."; 853 CHECK(false) << "Unable to deserialize message in RenderViewImpl.";
846 } 854 }
847
848 return handled; 855 return handled;
849 } 856 }
850 857
851 void RenderViewImpl::OnNavigate(const ViewMsg_Navigate_Params& params) { 858 void RenderViewImpl::OnNavigate(const ViewMsg_Navigate_Params& params) {
852 MaybeHandleDebugURL(params.url); 859 MaybeHandleDebugURL(params.url);
853 if (!webview()) 860 if (!webview())
854 return; 861 return;
855 862
856 FOR_EACH_OBSERVER(RenderViewObserver, observers_, Navigate(params.url)); 863 FOR_EACH_OBSERVER(RenderViewObserver, observers_, Navigate(params.url));
857 864
(...skipping 707 matching lines...) Expand 10 before | Expand all | Expand 10 after
1565 CHECK(session_storage_namespace_id_ != kInvalidSessionStorageNamespaceId); 1572 CHECK(session_storage_namespace_id_ != kInvalidSessionStorageNamespaceId);
1566 return new RendererWebStorageNamespaceImpl(DOM_STORAGE_SESSION, 1573 return new RendererWebStorageNamespaceImpl(DOM_STORAGE_SESSION,
1567 session_storage_namespace_id_); 1574 session_storage_namespace_id_);
1568 #endif 1575 #endif
1569 } 1576 }
1570 1577
1571 WebGraphicsContext3D* RenderViewImpl::createGraphicsContext3D( 1578 WebGraphicsContext3D* RenderViewImpl::createGraphicsContext3D(
1572 const WebGraphicsContext3D::Attributes& attributes) { 1579 const WebGraphicsContext3D::Attributes& attributes) {
1573 if (!webview()) 1580 if (!webview())
1574 return NULL; 1581 return NULL;
1582
1583 if (guest_) {
1584 context_is_web_graphics_context_3d_command_buffer_impl_ = true;
1585 return guest_observer_->GetWebGraphicsContext3D(attributes);
piman 2012/04/06 23:19:26 When the context gets lost, we usually are in a st
Fady Samuel 2012/04/11 22:06:34 I can have the context inform the GuestToHostChann
1586 }
1575 // The WebGraphicsContext3DInProcessImpl code path is used for 1587 // The WebGraphicsContext3DInProcessImpl code path is used for
1576 // layout tests (though not through this code) as well as for 1588 // layout tests (though not through this code) as well as for
1577 // debugging and bringing up new ports. 1589 // debugging and bringing up new ports.
1578 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kInProcessWebGL)) { 1590 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kInProcessWebGL)) {
1579 return webkit::gpu::WebGraphicsContext3DInProcessImpl::CreateForWebView( 1591 return webkit::gpu::WebGraphicsContext3DInProcessImpl::CreateForWebView(
1580 attributes, true); 1592 attributes, true);
1581 } else { 1593 } else {
1582 GURL url; 1594 GURL url;
1583 if (webview()->mainFrame()) 1595 if (webview()->mainFrame())
1584 url = GURL(webview()->mainFrame()->document().url()); 1596 url = GURL(webview()->mainFrame()->document().url());
(...skipping 1943 matching lines...) Expand 10 before | Expand all | Expand 10 after
3528 if (node.isContentEditable()) { 3540 if (node.isContentEditable()) {
3529 is_editable_node = true; 3541 is_editable_node = true;
3530 } else if (node.isElementNode()) { 3542 } else if (node.isElementNode()) {
3531 is_editable_node = 3543 is_editable_node =
3532 node.toConst<WebElement>().isTextFormControlElement(); 3544 node.toConst<WebElement>().isTextFormControlElement();
3533 } 3545 }
3534 } 3546 }
3535 return is_editable_node; 3547 return is_editable_node;
3536 } 3548 }
3537 3549
3550 WebKit::WebPlugin* RenderViewImpl::CreateBrowserPlugin(
3551 base::ProcessHandle process_handle,
3552 const IPC::ChannelHandle& channel_handle,
3553 const WebKit::WebPluginParams& params) {
3554 scoped_refptr<webkit::ppapi::PluginModule> pepper_module(
3555 pepper_delegate_.CreateBrowserPluginModule(process_handle,
3556 channel_handle));
3557 return new webkit::ppapi::WebPluginImpl(
3558 pepper_module.get(), params, pepper_delegate_.AsWeakPtr());
3559 }
3560
3538 WebKit::WebPlugin* RenderViewImpl::CreatePlugin( 3561 WebKit::WebPlugin* RenderViewImpl::CreatePlugin(
3539 WebKit::WebFrame* frame, 3562 WebKit::WebFrame* frame,
3540 const webkit::WebPluginInfo& info, 3563 const webkit::WebPluginInfo& info,
3541 const WebKit::WebPluginParams& params) { 3564 const WebKit::WebPluginParams& params) {
3542 bool pepper_plugin_was_registered = false; 3565 bool pepper_plugin_was_registered = false;
3543 scoped_refptr<webkit::ppapi::PluginModule> pepper_module( 3566 scoped_refptr<webkit::ppapi::PluginModule> pepper_module(
3544 pepper_delegate_.CreatePepperPluginModule(info, 3567 pepper_delegate_.CreatePepperPluginModule(info,
3545 &pepper_plugin_was_registered)); 3568 &pepper_plugin_was_registered));
3546 if (pepper_plugin_was_registered) { 3569 if (pepper_plugin_was_registered) {
3547 if (!pepper_module) 3570 if (!pepper_module)
(...skipping 1011 matching lines...) Expand 10 before | Expand all | Expand 10 after
4559 } 4582 }
4560 4583
4561 void RenderViewImpl::WillInitiatePaint() { 4584 void RenderViewImpl::WillInitiatePaint() {
4562 // Notify the pepper plugins that we're about to paint. 4585 // Notify the pepper plugins that we're about to paint.
4563 pepper_delegate_.ViewWillInitiatePaint(); 4586 pepper_delegate_.ViewWillInitiatePaint();
4564 } 4587 }
4565 4588
4566 void RenderViewImpl::DidInitiatePaint() { 4589 void RenderViewImpl::DidInitiatePaint() {
4567 // Notify the pepper plugins that we've painted, and are waiting to flush. 4590 // Notify the pepper plugins that we've painted, and are waiting to flush.
4568 pepper_delegate_.ViewInitiatedPaint(); 4591 pepper_delegate_.ViewInitiatedPaint();
4592 if (guest())
4593 guest_observer_->IssueSwapBuffers();
4569 } 4594 }
4570 4595
4571 void RenderViewImpl::DidFlushPaint() { 4596 void RenderViewImpl::DidFlushPaint() {
4572 // Notify any pepper plugins that we painted. This will call into the plugin, 4597 // Notify any pepper plugins that we painted. This will call into the plugin,
4573 // and we it may ask to close itself as a result. This will, in turn, modify 4598 // and we it may ask to close itself as a result. This will, in turn, modify
4574 // our set, possibly invalidating the iterator. So we iterate on a copy that 4599 // our set, possibly invalidating the iterator. So we iterate on a copy that
4575 // won't change out from under us. 4600 // won't change out from under us.
4576 pepper_delegate_.ViewFlushedPaint(); 4601 pepper_delegate_.ViewFlushedPaint();
4577 4602
4578 // If the RenderWidget is closing down then early-exit, otherwise we'll crash. 4603 // If the RenderWidget is closing down then early-exit, otherwise we'll crash.
(...skipping 27 matching lines...) Expand all
4606 } 4631 }
4607 4632
4608 void RenderViewImpl::OnViewContextSwapBuffersComplete() { 4633 void RenderViewImpl::OnViewContextSwapBuffersComplete() {
4609 RenderWidget::OnSwapBuffersComplete(); 4634 RenderWidget::OnSwapBuffersComplete();
4610 } 4635 }
4611 4636
4612 void RenderViewImpl::OnViewContextSwapBuffersAborted() { 4637 void RenderViewImpl::OnViewContextSwapBuffersAborted() {
4613 RenderWidget::OnSwapBuffersAborted(); 4638 RenderWidget::OnSwapBuffersAborted();
4614 } 4639 }
4615 4640
4641 void RenderViewImpl::OnGuestReady() {
4642 CompleteInit(host_window_);
4643 }
4644
4616 webkit::ppapi::PluginInstance* RenderViewImpl::GetBitmapForOptimizedPluginPaint( 4645 webkit::ppapi::PluginInstance* RenderViewImpl::GetBitmapForOptimizedPluginPaint(
4617 const gfx::Rect& paint_bounds, 4646 const gfx::Rect& paint_bounds,
4618 TransportDIB** dib, 4647 TransportDIB** dib,
4619 gfx::Rect* location, 4648 gfx::Rect* location,
4620 gfx::Rect* clip) { 4649 gfx::Rect* clip) {
4621 return pepper_delegate_.GetBitmapForOptimizedPluginPaint( 4650 return pepper_delegate_.GetBitmapForOptimizedPluginPaint(
4622 paint_bounds, dib, location, clip); 4651 paint_bounds, dib, location, clip);
4623 } 4652 }
4624 4653
4625 gfx::Point RenderViewImpl::GetScrollOffset() { 4654 gfx::Point RenderViewImpl::GetScrollOffset() {
(...skipping 607 matching lines...) Expand 10 before | Expand all | Expand 10 after
5233 bool RenderViewImpl::WebWidgetHandlesCompositorScheduling() const { 5262 bool RenderViewImpl::WebWidgetHandlesCompositorScheduling() const {
5234 return !!RenderThreadImpl::current()->compositor_thread(); 5263 return !!RenderThreadImpl::current()->compositor_thread();
5235 } 5264 }
5236 5265
5237 void RenderViewImpl::OnJavaBridgeInit() { 5266 void RenderViewImpl::OnJavaBridgeInit() {
5238 DCHECK(!java_bridge_dispatcher_.get()); 5267 DCHECK(!java_bridge_dispatcher_.get());
5239 #if defined(ENABLE_JAVA_BRIDGE) 5268 #if defined(ENABLE_JAVA_BRIDGE)
5240 java_bridge_dispatcher_.reset(new JavaBridgeDispatcher(this)); 5269 java_bridge_dispatcher_.reset(new JavaBridgeDispatcher(this));
5241 #endif 5270 #endif
5242 } 5271 }
OLDNEW
« content/renderer/render_view_impl.h ('K') | « content/renderer/render_view_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698