| OLD | NEW |
| 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 <memory> | 9 #include <memory> |
| 10 | 10 |
| (...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 275 // state and scroll position) to the browser. We delay sending changes to avoid | 275 // state and scroll position) to the browser. We delay sending changes to avoid |
| 276 // spamming the browser. | 276 // spamming the browser. |
| 277 // To avoid having tab/session restore require sending a message to get the | 277 // To avoid having tab/session restore require sending a message to get the |
| 278 // current content state during tab closing we use a shorter timeout for the | 278 // current content state during tab closing we use a shorter timeout for the |
| 279 // foreground renderer. This means there is a small window of time from which | 279 // foreground renderer. This means there is a small window of time from which |
| 280 // content state is modified and not sent to session restore, but this is | 280 // content state is modified and not sent to session restore, but this is |
| 281 // better than having to wake up all renderers during shutdown. | 281 // better than having to wake up all renderers during shutdown. |
| 282 const int kDelaySecondsForContentStateSyncHidden = 5; | 282 const int kDelaySecondsForContentStateSyncHidden = 5; |
| 283 const int kDelaySecondsForContentStateSync = 1; | 283 const int kDelaySecondsForContentStateSync = 1; |
| 284 | 284 |
| 285 #if defined(OS_ANDROID) | |
| 286 // Delay between tapping in content and launching the associated android intent. | |
| 287 // Used to allow users see what has been recognized as content. | |
| 288 const size_t kContentIntentDelayMilliseconds = 700; | |
| 289 #endif | |
| 290 | |
| 291 static RenderViewImpl* (*g_create_render_view_impl)( | 285 static RenderViewImpl* (*g_create_render_view_impl)( |
| 292 CompositorDependencies* compositor_deps, | 286 CompositorDependencies* compositor_deps, |
| 293 const mojom::CreateViewParams&) = nullptr; | 287 const mojom::CreateViewParams&) = nullptr; |
| 294 | 288 |
| 295 // static | 289 // static |
| 296 Referrer RenderViewImpl::GetReferrerFromRequest( | 290 Referrer RenderViewImpl::GetReferrerFromRequest( |
| 297 WebFrame* frame, | 291 WebFrame* frame, |
| 298 const WebURLRequest& request) { | 292 const WebURLRequest& request) { |
| 299 return Referrer( | 293 return Referrer( |
| 300 blink::WebStringToGURL(request.httpHeaderField( | 294 blink::WebStringToGURL(request.httpHeaderField( |
| (...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 683 webview_(nullptr), | 677 webview_(nullptr), |
| 684 has_scrolled_focused_editable_node_into_rect_(false), | 678 has_scrolled_focused_editable_node_into_rect_(false), |
| 685 page_zoom_level_(params.page_zoom_level), | 679 page_zoom_level_(params.page_zoom_level), |
| 686 main_render_frame_(nullptr), | 680 main_render_frame_(nullptr), |
| 687 frame_widget_(nullptr), | 681 frame_widget_(nullptr), |
| 688 speech_recognition_dispatcher_(NULL), | 682 speech_recognition_dispatcher_(NULL), |
| 689 #if defined(OS_ANDROID) | 683 #if defined(OS_ANDROID) |
| 690 expected_content_intent_id_(0), | 684 expected_content_intent_id_(0), |
| 691 #endif | 685 #endif |
| 692 enumeration_completion_id_(0), | 686 enumeration_completion_id_(0), |
| 693 session_storage_namespace_id_(params.session_storage_namespace_id), | 687 session_storage_namespace_id_(params.session_storage_namespace_id) { |
| 694 has_added_input_handler_(false) { | |
| 695 GetWidget()->set_owner_delegate(this); | 688 GetWidget()->set_owner_delegate(this); |
| 696 } | 689 } |
| 697 | 690 |
| 698 void RenderViewImpl::Initialize(const mojom::CreateViewParams& params, | 691 void RenderViewImpl::Initialize(const mojom::CreateViewParams& params, |
| 699 bool was_created_by_renderer) { | 692 bool was_created_by_renderer) { |
| 700 SetRoutingID(params.view_id); | 693 SetRoutingID(params.view_id); |
| 701 | 694 |
| 702 int opener_view_routing_id; | 695 int opener_view_routing_id; |
| 703 WebFrame* opener_frame = RenderFrameImpl::ResolveOpener( | 696 WebFrame* opener_frame = RenderFrameImpl::ResolveOpener( |
| 704 params.opener_frame_route_id, &opener_view_routing_id); | 697 params.opener_frame_route_id, &opener_view_routing_id); |
| (...skipping 1247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1952 // TODO(estade): hit test the event against focused node to make sure | 1945 // TODO(estade): hit test the event against focused node to make sure |
| 1953 // the tap actually hit the focused node. | 1946 // the tap actually hit the focused node. |
| 1954 blink::WebTextInputType text_input_type = GetWebView()->textInputType(); | 1947 blink::WebTextInputType text_input_type = GetWebView()->textInputType(); |
| 1955 | 1948 |
| 1956 Send(new ViewHostMsg_FocusedNodeTouched( | 1949 Send(new ViewHostMsg_FocusedNodeTouched( |
| 1957 GetRoutingID(), text_input_type != blink::WebTextInputTypeNone)); | 1950 GetRoutingID(), text_input_type != blink::WebTextInputTypeNone)); |
| 1958 #endif | 1951 #endif |
| 1959 } | 1952 } |
| 1960 | 1953 |
| 1961 void RenderViewImpl::initializeLayerTreeView() { | 1954 void RenderViewImpl::initializeLayerTreeView() { |
| 1955 // TODO(!wjmaclean): We should be able to just remove this function, and |
| 1956 // expect the RenderWidget version of the function to be called instead. |
| 1957 // However, we have a diamond inheritance pattern going on: |
| 1958 // WebWidgetClient |
| 1959 // | | |
| 1960 // RenderWidget WebViewClient |
| 1961 // | | |
| 1962 // RenderViewImpl |
| 1963 // |
| 1964 // and this seems to prefer calling the empty version in WebWidgetClient |
| 1965 // or WebViewClient over the non-empty one in RenderWidget. |
| 1962 RenderWidget::initializeLayerTreeView(); | 1966 RenderWidget::initializeLayerTreeView(); |
| 1963 RenderWidgetCompositor* rwc = compositor(); | |
| 1964 if (!rwc) | |
| 1965 return; | |
| 1966 | |
| 1967 bool use_threaded_event_handling = true; | |
| 1968 #if defined(OS_MACOSX) | |
| 1969 // Disable threaded event handling if content is not handling the elastic | |
| 1970 // overscroll effect. This includes the cases where the elastic overscroll | |
| 1971 // effect is being handled by Blink (because of command line flags) and older | |
| 1972 // operating system versions which do not have an elastic overscroll effect | |
| 1973 // (SnowLeopard, which has Aqua scrollbars which need synchronous updates). | |
| 1974 use_threaded_event_handling = compositor_deps_->IsElasticOverscrollEnabled(); | |
| 1975 #endif | |
| 1976 if (!use_threaded_event_handling) | |
| 1977 return; | |
| 1978 | |
| 1979 RenderThreadImpl* render_thread = RenderThreadImpl::current(); | |
| 1980 // render_thread may be NULL in tests. | |
| 1981 InputHandlerManager* input_handler_manager = | |
| 1982 render_thread ? render_thread->input_handler_manager() : NULL; | |
| 1983 if (input_handler_manager) { | |
| 1984 input_handler_manager->AddInputHandler( | |
| 1985 GetRoutingID(), rwc->GetInputHandler(), AsWeakPtr(), | |
| 1986 webkit_preferences_.enable_scroll_animator); | |
| 1987 has_added_input_handler_ = true; | |
| 1988 } | |
| 1989 } | 1967 } |
| 1990 | 1968 |
| 1991 void RenderViewImpl::closeWidgetSoon() { | 1969 void RenderViewImpl::closeWidgetSoon() { |
| 1992 RenderWidget::closeWidgetSoon(); | 1970 RenderWidget::closeWidgetSoon(); |
| 1993 } | 1971 } |
| 1994 | 1972 |
| 1995 void RenderViewImpl::convertViewportToWindow(blink::WebRect* rect) { | 1973 void RenderViewImpl::convertViewportToWindow(blink::WebRect* rect) { |
| 1996 RenderWidget::convertViewportToWindow(rect); | 1974 RenderWidget::convertViewportToWindow(rect); |
| 1997 } | 1975 } |
| 1998 | 1976 |
| (...skipping 701 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2700 WebURL intent = detector->FindTappedContent(touch_hit); | 2678 WebURL intent = detector->FindTappedContent(touch_hit); |
| 2701 if (intent.isValid()) { | 2679 if (intent.isValid()) { |
| 2702 return intent; | 2680 return intent; |
| 2703 } | 2681 } |
| 2704 } | 2682 } |
| 2705 return WebURL(); | 2683 return WebURL(); |
| 2706 } | 2684 } |
| 2707 | 2685 |
| 2708 void RenderViewImpl::scheduleContentIntent(const WebURL& intent, | 2686 void RenderViewImpl::scheduleContentIntent(const WebURL& intent, |
| 2709 bool is_main_frame) { | 2687 bool is_main_frame) { |
| 2710 // Introduce a short delay so that the user can notice the content. | 2688 scheduleContentIntentForRenderView(intent, is_main_frame, |
| 2711 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 2689 expected_content_intent_id_); |
| 2712 FROM_HERE, | |
| 2713 base::Bind(&RenderViewImpl::LaunchAndroidContentIntent, AsWeakPtr(), | |
| 2714 intent, expected_content_intent_id_, is_main_frame), | |
| 2715 base::TimeDelta::FromMilliseconds(kContentIntentDelayMilliseconds)); | |
| 2716 } | 2690 } |
| 2717 | 2691 |
| 2718 void RenderViewImpl::cancelScheduledContentIntents() { | 2692 void RenderViewImpl::cancelScheduledContentIntents() { |
| 2719 ++expected_content_intent_id_; | 2693 ++expected_content_intent_id_; |
| 2720 } | 2694 } |
| 2721 | 2695 |
| 2722 void RenderViewImpl::LaunchAndroidContentIntent(const GURL& intent, | 2696 void RenderViewImpl::LaunchAndroidContentIntent(const GURL& intent, |
| 2723 size_t request_id, | 2697 size_t request_id, |
| 2724 bool is_main_frame) { | 2698 bool is_main_frame) { |
| 2725 if (request_id != expected_content_intent_id_) | 2699 if (request_id != expected_content_intent_id_) |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2967 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 2941 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 2968 } | 2942 } |
| 2969 | 2943 |
| 2970 std::unique_ptr<InputEventAck> ack( | 2944 std::unique_ptr<InputEventAck> ack( |
| 2971 new InputEventAck(InputEventAckSource::MAIN_THREAD, input_event->type, | 2945 new InputEventAck(InputEventAckSource::MAIN_THREAD, input_event->type, |
| 2972 INPUT_EVENT_ACK_STATE_NOT_CONSUMED)); | 2946 INPUT_EVENT_ACK_STATE_NOT_CONSUMED)); |
| 2973 OnInputEventAck(std::move(ack)); | 2947 OnInputEventAck(std::move(ack)); |
| 2974 } | 2948 } |
| 2975 | 2949 |
| 2976 } // namespace content | 2950 } // namespace content |
| OLD | NEW |