X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fcontent%2Fbrowser%2Fframe_host%2Frender_widget_host_view_guest.cc;h=2cd0ba3d0aadb53fa41e18d06a664f1c1ab926d5;hb=004985e17e624662a4c85c76a7654039dc83f028;hp=4501efab5d0cfd01511c2e1695eb8f25026edd97;hpb=2f108dbacb161091e42a3479f4e171339b7e7623;p=platform%2Fframework%2Fweb%2Fcrosswalk.git diff --git a/src/content/browser/frame_host/render_widget_host_view_guest.cc b/src/content/browser/frame_host/render_widget_host_view_guest.cc index 4501efa..2cd0ba3 100644 --- a/src/content/browser/frame_host/render_widget_host_view_guest.cc +++ b/src/content/browser/frame_host/render_widget_host_view_guest.cc @@ -12,6 +12,8 @@ #include "content/common/browser_plugin/browser_plugin_messages.h" #include "content/common/frame_messages.h" #include "content/common/gpu/gpu_messages.h" +#include "content/common/host_shared_bitmap_manager.h" +#include "content/common/input/web_touch_event_traits.h" #include "content/common/view_messages.h" #include "content/common/webplugin_geometry.h" #include "content/public/common/content_switches.h" @@ -22,7 +24,7 @@ #import "content/browser/renderer_host/render_widget_host_view_mac_dictionary_helper.h" #endif -#if defined(OS_WIN) || defined(USE_AURA) +#if defined(USE_AURA) #include "content/browser/renderer_host/ui_events_helper.h" #endif @@ -30,7 +32,7 @@ namespace content { namespace { -#if defined(OS_WIN) || defined(USE_AURA) +#if defined(USE_AURA) blink::WebGestureEvent CreateFlingCancelEvent(double time_stamp) { blink::WebGestureEvent gesture_event; gesture_event.timeStampSeconds = time_stamp; @@ -38,28 +40,28 @@ blink::WebGestureEvent CreateFlingCancelEvent(double time_stamp) { gesture_event.sourceDevice = blink::WebGestureEvent::Touchscreen; return gesture_event; } -#endif // defined(OS_WIN) || defined(USE_AURA) +#endif // defined(USE_AURA) } // namespace RenderWidgetHostViewGuest::RenderWidgetHostViewGuest( RenderWidgetHost* widget_host, BrowserPluginGuest* guest, - RenderWidgetHostView* platform_view) + RenderWidgetHostViewBase* platform_view) : RenderWidgetHostViewChildFrame(widget_host), // |guest| is NULL during test. guest_(guest ? guest->AsWeakPtr() : base::WeakPtr()), - platform_view_(static_cast(platform_view)) { -#if defined(OS_WIN) || defined(USE_AURA) + platform_view_(platform_view) { +#if defined(USE_AURA) gesture_recognizer_.reset(ui::GestureRecognizer::Create()); gesture_recognizer_->AddGestureEventHelper(this); -#endif // defined(OS_WIN) || defined(USE_AURA) +#endif // defined(USE_AURA) } RenderWidgetHostViewGuest::~RenderWidgetHostViewGuest() { -#if defined(OS_WIN) || defined(USE_AURA) +#if defined(USE_AURA) gesture_recognizer_->RemoveGestureEventHelper(this); -#endif // defined(OS_WIN) || defined(USE_AURA) +#endif // defined(USE_AURA) } void RenderWidgetHostViewGuest::WasShown() { @@ -91,7 +93,7 @@ void RenderWidgetHostViewGuest::SetBounds(const gfx::Rect& rect) { SetSize(rect.size()); } -#if defined(OS_WIN) || defined(USE_AURA) +#if defined(USE_AURA) void RenderWidgetHostViewGuest::ProcessAckedTouchEvent( const TouchEventWithLatencyInfo& touch, InputEventAckState ack_result) { // TODO(fsamuel): Currently we will only take this codepath if the guest has @@ -119,8 +121,7 @@ gfx::Rect RenderWidgetHostViewGuest::GetViewBounds() const { if (!guest_) return gfx::Rect(); - RenderWidgetHostViewPort* rwhv = static_cast( - guest_->GetEmbedderRenderWidgetHostView()); + RenderWidgetHostViewBase* rwhv = GetGuestRenderWidgetHostView(); gfx::Rect embedder_bounds; if (rwhv) embedder_bounds = rwhv->GetViewBounds(); @@ -165,9 +166,6 @@ void RenderWidgetHostViewGuest::AcceleratedSurfaceBuffersSwapped( if (!guest_) return; - // If accelerated surface buffers are getting swapped then we're not using - // the software path. - guest_->clear_damage_buffer(); FrameMsg_BuffersSwapped_Params guest_params; guest_params.size = params.size; guest_params.mailbox = params.mailbox; @@ -190,28 +188,27 @@ void RenderWidgetHostViewGuest::OnSwapCompositorFrame( if (!guest_) return; - guest_->clear_damage_buffer(); - if (!guest_->attached()) { // If the guest doesn't have an embedder then there's nothing to give the // the frame to. return; } + base::SharedMemoryHandle software_frame_handle = + base::SharedMemory::NULLHandle(); if (frame->software_frame_data) { cc::SoftwareFrameData* frame_data = frame->software_frame_data.get(); -#ifdef OS_WIN - base::SharedMemory shared_memory(frame_data->handle, true, - host_->GetProcess()->GetHandle()); -#else - base::SharedMemory shared_memory(frame_data->handle, true); -#endif + scoped_ptr bitmap = + HostSharedBitmapManager::current()->GetSharedBitmapFromId( + frame_data->size, frame_data->bitmap_id); + if (!bitmap) + return; RenderWidgetHostView* embedder_rwhv = guest_->GetEmbedderRenderWidgetHostView(); base::ProcessHandle embedder_pid = embedder_rwhv->GetRenderWidgetHost()->GetProcess()->GetHandle(); - shared_memory.GiveToProcess(embedder_pid, &frame_data->handle); + bitmap->memory()->ShareToProcess(embedder_pid, &software_frame_handle); } FrameMsg_CompositorFrameSwapped_Params guest_params; @@ -219,6 +216,7 @@ void RenderWidgetHostViewGuest::OnSwapCompositorFrame( guest_params.output_surface_id = output_surface_id; guest_params.producing_route_id = host_->GetRoutingID(); guest_params.producing_host_id = host_->GetProcess()->GetID(); + guest_params.shared_memory_handle = software_frame_handle; guest_->SendMessageToEmbedder( new BrowserPluginMsg_CompositorFrameSwapped(guest_->instance_id(), @@ -277,9 +275,8 @@ gfx::NativeViewAccessible RenderWidgetHostViewGuest::GetNativeViewAccessible() { } void RenderWidgetHostViewGuest::MovePluginWindows( - const gfx::Vector2d& scroll_offset, const std::vector& moves) { - platform_view_->MovePluginWindows(scroll_offset, moves); + platform_view_->MovePluginWindows(moves); } void RenderWidgetHostViewGuest::UpdateCursor(const WebCursor& cursor) { @@ -297,8 +294,7 @@ void RenderWidgetHostViewGuest::TextInputTypeChanged( if (!guest_) return; - RenderWidgetHostViewPort* rwhv = RenderWidgetHostViewPort::FromRWHV( - guest_->GetEmbedderRenderWidgetHostView()); + RenderWidgetHostViewBase* rwhv = GetGuestRenderWidgetHostView(); if (!rwhv) return; // Forward the information to embedding RWHV. @@ -309,23 +305,21 @@ void RenderWidgetHostViewGuest::ImeCancelComposition() { if (!guest_) return; - RenderWidgetHostViewPort* rwhv = RenderWidgetHostViewPort::FromRWHV( - guest_->GetEmbedderRenderWidgetHostView()); + RenderWidgetHostViewBase* rwhv = GetGuestRenderWidgetHostView(); if (!rwhv) return; // Forward the information to embedding RWHV. rwhv->ImeCancelComposition(); } -#if defined(OS_MACOSX) || defined(OS_WIN) || defined(USE_AURA) +#if defined(OS_MACOSX) || defined(USE_AURA) void RenderWidgetHostViewGuest::ImeCompositionRangeChanged( const gfx::Range& range, const std::vector& character_bounds) { if (!guest_) return; - RenderWidgetHostViewPort* rwhv = RenderWidgetHostViewPort::FromRWHV( - guest_->GetEmbedderRenderWidgetHostView()); + RenderWidgetHostViewBase* rwhv = GetGuestRenderWidgetHostView(); if (!rwhv) return; std::vector guest_character_bounds; @@ -338,14 +332,6 @@ void RenderWidgetHostViewGuest::ImeCompositionRangeChanged( } #endif -void RenderWidgetHostViewGuest::DidUpdateBackingStore( - const gfx::Rect& scroll_rect, - const gfx::Vector2d& scroll_delta, - const std::vector& copy_rects, - const std::vector& latency_info) { - NOTREACHED(); -} - void RenderWidgetHostViewGuest::SelectionChanged(const base::string16& text, size_t offset, const gfx::Range& range) { @@ -357,8 +343,7 @@ void RenderWidgetHostViewGuest::SelectionBoundsChanged( if (!guest_) return; - RenderWidgetHostViewPort* rwhv = RenderWidgetHostViewPort::FromRWHV( - guest_->GetEmbedderRenderWidgetHostView()); + RenderWidgetHostViewBase* rwhv = GetGuestRenderWidgetHostView(); if (!rwhv) return; ViewHostMsg_SelectionBounds_Params guest_params(params); @@ -373,8 +358,7 @@ void RenderWidgetHostViewGuest::SelectionRootBoundsChanged( if (!guest_) return; - RenderWidgetHostViewPort* rwhv = RenderWidgetHostViewPort::FromRWHV( - guest_->GetEmbedderRenderWidgetHostView()); + RenderWidgetHostViewBase* rwhv = GetGuestRenderWidgetHostView(); if (!rwhv) return; @@ -395,11 +379,6 @@ void RenderWidgetHostViewGuest::SetBackground(const SkBitmap& background) { platform_view_->SetBackground(background); } -void RenderWidgetHostViewGuest::SetHasHorizontalScrollbar( - bool has_horizontal_scrollbar) { - platform_view_->SetHasHorizontalScrollbar(has_horizontal_scrollbar); -} - void RenderWidgetHostViewGuest::SetScrollOffsetPinning( bool is_pinned_to_left, bool is_pinned_to_right) { platform_view_->SetScrollOffsetPinning( @@ -417,9 +396,7 @@ void RenderWidgetHostViewGuest::UnlockMouse() { void RenderWidgetHostViewGuest::GetScreenInfo(blink::WebScreenInfo* results) { if (!guest_) return; - RenderWidgetHostViewPort* embedder_view = - RenderWidgetHostViewPort::FromRWHV( - guest_->GetEmbedderRenderWidgetHostView()); + RenderWidgetHostViewBase* embedder_view = GetGuestRenderWidgetHostView(); if (embedder_view) embedder_view->GetScreenInfo(results); } @@ -492,17 +469,13 @@ void RenderWidgetHostViewGuest::ShowDisambiguationPopup( const gfx::Rect& target_rect, const SkBitmap& zoomed_bitmap) { } -#endif // defined(OS_ANDROID) -#if defined(TOOLKIT_GTK) -GdkEventButton* RenderWidgetHostViewGuest::GetLastMouseDown() { - return NULL; +void RenderWidgetHostViewGuest::LockCompositingSurface() { } -gfx::NativeView RenderWidgetHostViewGuest::BuildInputMethodsGtkMenu() { - return platform_view_->BuildInputMethodsGtkMenu(); +void RenderWidgetHostViewGuest::UnlockCompositingSurface() { } -#endif // defined(TOOLKIT_GTK) +#endif // defined(OS_ANDROID) #if defined(OS_WIN) void RenderWidgetHostViewGuest::SetParentNativeViewAccessible( @@ -527,7 +500,7 @@ bool RenderWidgetHostViewGuest::CanDispatchToConsumer( return true; } -void RenderWidgetHostViewGuest::DispatchPostponedGestureEvent( +void RenderWidgetHostViewGuest::DispatchGestureEvent( ui::GestureEvent* event) { ForwardGestureEventToRenderer(event); } @@ -538,14 +511,18 @@ void RenderWidgetHostViewGuest::DispatchCancelTouchEvent( return; blink::WebTouchEvent cancel_event; - cancel_event.type = blink::WebInputEvent::TouchCancel; - cancel_event.timeStampSeconds = event->time_stamp().InSecondsF(); + // TODO(rbyers): This event has no touches in it. Don't we need to know what + // touches are currently active in order to cancel them all properly? + WebTouchEventTraits::ResetType(blink::WebInputEvent::TouchCancel, + event->time_stamp().InSecondsF(), + &cancel_event); + host_->ForwardTouchEventWithLatencyInfo(cancel_event, *event->latency()); } bool RenderWidgetHostViewGuest::ForwardGestureEventToRenderer( ui::GestureEvent* gesture) { -#if defined(OS_WIN) || defined(USE_AURA) +#if defined(USE_AURA) if (!host_) return false; @@ -593,4 +570,10 @@ SkBitmap::Config RenderWidgetHostViewGuest::PreferredReadbackFormat() { return SkBitmap::kARGB_8888_Config; } +RenderWidgetHostViewBase* +RenderWidgetHostViewGuest::GetGuestRenderWidgetHostView() const { + return static_cast( + guest_->GetEmbedderRenderWidgetHostView()); +} + } // namespace content