15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/render_view_impl.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <algorithm> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <cmath> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/auto_reset.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind_helpers.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/debug/alias.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/debug/trace_event.h" 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/files/file_path.h" 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/i18n/rtl.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/json/json_writer.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/lazy_instance.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/message_loop/message_loop_proxy.h" 23f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/metrics/field_trial.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/metrics/histogram.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h" 26bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "base/process/kill.h" 274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/process/process.h" 28868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_number_conversions.h" 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/strings/string_piece.h" 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_split.h" 31868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h" 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/strings/sys_string_conversions.h" 33868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 358bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "cc/base/switches.h" 36ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "content/child/appcache/appcache_dispatcher.h" 37ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "content/child/appcache/web_application_cache_host_impl.h" 380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "content/child/child_shared_bitmap_manager.h" 39868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "content/child/child_thread.h" 40ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "content/child/npapi/webplugin_delegate_impl.h" 41868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "content/child/request_extra_data.h" 42868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "content/child/webmessageportchannel_impl.h" 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/common/content_constants_internal.h" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/database_messages.h" 45bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "content/common/dom_storage/dom_storage_types.h" 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/drag_messages.h" 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/common/frame_messages.h" 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h" 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/common/input_messages.h" 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/pepper_messages.h" 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/socket_stream_handle_data.h" 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/common/ssl_status_serialization.h" 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/view_messages.h" 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/bindings_policy.h" 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/content_client.h" 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/content_constants.h" 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/content_switches.h" 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/public/common/drop_data.h" 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/common/favicon_url.h" 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/file_chooser_params.h" 6158e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch#include "content/public/common/page_zoom.h" 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/common/ssl_status.h" 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/common/three_d_api_types.h" 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/url_constants.h" 6590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "content/public/common/url_utils.h" 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/common/web_preferences.h" 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/renderer/content_renderer_client.h" 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/renderer/document_state.h" 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/renderer/navigation_state.h" 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/renderer/render_view_observer.h" 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/renderer/render_view_visitor.h" 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/renderer/accessibility/renderer_accessibility.h" 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/renderer/accessibility/renderer_accessibility_complete.h" 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/renderer/accessibility/renderer_accessibility_focus_only.h" 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/browser_plugin/browser_plugin.h" 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/browser_plugin/browser_plugin_manager.h" 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/renderer/browser_plugin/browser_plugin_manager_impl.h" 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/renderer/devtools/devtools_agent.h" 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/disambiguation_popup_helper.h" 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/dom_storage/webstoragenamespace_impl.h" 81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/renderer/drop_data_builder.h" 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/renderer/gpu/render_widget_compositor.h" 83a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "content/renderer/history_controller.h" 845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "content/renderer/history_serialization.h" 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/idle_user_detector.h" 8690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "content/renderer/ime_event_guard.h" 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/renderer/input/input_handler_manager.h" 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/renderer/internal_document_state_data.h" 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/renderer/media/audio_device_factory.h" 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/renderer/media/video_capture_impl_manager.h" 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/renderer/memory_benchmarking_extension.h" 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/mhtml_generator.h" 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/renderer/net_info_helper.h" 94868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "content/renderer/render_frame_impl.h" 95cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/renderer/render_frame_proxy.h" 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/render_process.h" 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/render_thread_impl.h" 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/renderer/render_view_impl_params.h" 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/render_view_mouse_lock_dispatcher.h" 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/render_widget_fullscreen_pepper.h" 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/renderer_webapplicationcachehost_impl.h" 1021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "content/renderer/resizing_mode_selector.h" 10390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "content/renderer/savable_resources.h" 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/renderer/skia_benchmarking_extension.h" 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/speech_recognition_dispatcher.h" 106868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "content/renderer/stats_collection_controller.h" 107868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "content/renderer/stats_collection_observer.h" 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/text_input_client_observer.h" 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/v8_value_converter_impl.h" 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/renderer/web_ui_extension.h" 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/renderer/web_ui_extension_data.h" 112c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "content/renderer/web_ui_mojo.h" 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/websharedworker_proxy.h" 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "media/audio/audio_output_device.h" 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/base/media_switches.h" 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/filters/audio_renderer_impl.h" 1173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "media/filters/gpu_video_accelerator_factories.h" 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/data_url.h" 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/escape.h" 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_errors.h" 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/registry_controlled_domains/registry_controlled_domain.h" 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/http/http_util.h" 1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "skia/ext/platform_canvas.h" 124ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "third_party/WebKit/public/platform/WebCString.h" 125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "third_party/WebKit/public/platform/WebConnectionType.h" 126ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "third_party/WebKit/public/platform/WebDragData.h" 127ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "third_party/WebKit/public/platform/WebHTTPBody.h" 128ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "third_party/WebKit/public/platform/WebImage.h" 129ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "third_party/WebKit/public/platform/WebMessagePortChannel.h" 130ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "third_party/WebKit/public/platform/WebPoint.h" 131ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "third_party/WebKit/public/platform/WebRect.h" 132ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "third_party/WebKit/public/platform/WebSize.h" 133ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "third_party/WebKit/public/platform/WebSocketStreamHandle.h" 134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "third_party/WebKit/public/platform/WebStorageQuotaCallbacks.h" 135ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "third_party/WebKit/public/platform/WebString.h" 136ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "third_party/WebKit/public/platform/WebURL.h" 137ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "third_party/WebKit/public/platform/WebURLError.h" 138ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "third_party/WebKit/public/platform/WebURLRequest.h" 139ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "third_party/WebKit/public/platform/WebURLResponse.h" 140ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "third_party/WebKit/public/platform/WebVector.h" 14158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "third_party/WebKit/public/web/WebAXObject.h" 1427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebColorName.h" 143a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "third_party/WebKit/public/web/WebColorSuggestion.h" 1447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebDOMEvent.h" 1457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebDOMMessageEvent.h" 1467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebDataSource.h" 1477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebDateTimeChooserCompletion.h" 1487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebDateTimeChooserParams.h" 1497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebDevToolsAgent.h" 1507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebDocument.h" 1517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebElement.h" 1527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebFileChooserParams.h" 1537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebFindOptions.h" 1547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebFormControlElement.h" 1557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebFormElement.h" 1567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebFrame.h" 157bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "third_party/WebKit/public/web/WebGlyphCache.h" 1587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebHistoryItem.h" 1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "third_party/WebKit/public/web/WebHitTestResult.h" 1607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebInputElement.h" 1617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebInputEvent.h" 1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "third_party/WebKit/public/web/WebKit.h" 163c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "third_party/WebKit/public/web/WebLocalFrame.h" 1647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebMediaPlayerAction.h" 1657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebNavigationPolicy.h" 166116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "third_party/WebKit/public/web/WebNetworkStateNotifier.h" 1677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebNodeList.h" 1687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebPageSerializer.h" 1697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebPlugin.h" 1707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebPluginAction.h" 1717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebPluginContainer.h" 1727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebPluginDocument.h" 1737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebRange.h" 174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "third_party/WebKit/public/web/WebRuntimeFeatures.h" 1757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebScriptSource.h" 1767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebSearchableFormData.h" 1777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebSecurityOrigin.h" 1787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebSecurityPolicy.h" 1797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebSerializedScriptValue.h" 1807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebSettings.h" 1817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebUserGestureIndicator.h" 1827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebView.h" 1837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebWindowFeatures.h" 1847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/default/WebRenderTheme.h" 185116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "third_party/icu/source/common/unicode/uchar.h" 186116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "third_party/icu/source/common/unicode/uscript.h" 187effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ui/base/clipboard/clipboard.h" 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/base/ui_base_switches_util.h" 1894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/events/latency_info.h" 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/native_widget_types.h" 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/point.h" 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/rect.h" 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/rect_conversions.h" 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/size_conversions.h" 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/shell_dialogs/selected_file_info.h" 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "v8/include/v8.h" 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <cpu-features.h> 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/android/address_detector.h" 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/android/content_detector.h" 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/android/email_detector.h" 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/android/phone_number_detector.h" 2055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "net/android/network_library.h" 206868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebFloatPoint.h" 207868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebFloatRect.h" 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/rect_f.h" 209868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_WIN) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(port): these files are currently Windows only because they concern: 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// * theming 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/native_theme/native_theme_win.h" 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(USE_X11) 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/native_theme/native_theme.h" 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "skia/ext/skia_utils_mac.h" 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2203240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#if defined(ENABLE_PLUGINS) 221bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "content/renderer/npapi/webplugin_delegate_proxy.h" 2223240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#include "content/renderer/pepper/pepper_plugin_instance_impl.h" 2233240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#include "content/renderer/pepper/pepper_plugin_registry.h" 2243240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#endif 2253240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 22658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(ENABLE_WEBRTC) 22758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "content/renderer/media/rtc_peer_connection_handler.h" 2286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/renderer/media/webrtc/peer_connection_dependency_factory.h" 22958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif 23058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 231f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebAXObject; 232f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebApplicationCacheHost; 233f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebApplicationCacheHostClient; 234f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebCString; 235f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebColor; 236f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebColorName; 237f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebConsoleMessage; 238f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebData; 239f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebDataSource; 240f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebDocument; 241f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebDOMEvent; 242f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebDOMMessageEvent; 243f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebDragData; 244f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebDragOperation; 245f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebDragOperationsMask; 246f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebElement; 247f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebFileChooserCompletion; 248f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebFindOptions; 249f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebFormControlElement; 250f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebFormElement; 251f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebFrame; 252f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebGestureEvent; 253f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebHistoryItem; 254f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebHTTPBody; 255f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebIconURL; 256f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebImage; 257f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebInputElement; 258f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebInputEvent; 259c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochusing blink::WebLocalFrame; 260f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebMediaPlayerAction; 261f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebMouseEvent; 262f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebNavigationPolicy; 263f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebNavigationType; 264f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebNode; 265f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebPageSerializer; 266f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebPageSerializerClient; 267f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebPeerConnection00Handler; 268f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebPeerConnection00HandlerClient; 269f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebPeerConnectionHandler; 270f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebPeerConnectionHandlerClient; 271f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebPluginAction; 272f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebPluginContainer; 273f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebPluginDocument; 274f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebPoint; 275f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebRange; 276f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebRect; 277f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebReferrerPolicy; 278f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebScriptSource; 279f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebSearchableFormData; 280f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebSecurityOrigin; 281f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebSecurityPolicy; 282f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebSerializedScriptValue; 283f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebSettings; 284f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebSize; 285f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebSocketStreamHandle; 286f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebStorageNamespace; 287f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebStorageQuotaCallbacks; 288f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebStorageQuotaError; 289f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebStorageQuotaType; 290f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebString; 291f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebTextAffinity; 292f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebTextDirection; 293f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebTouchEvent; 294f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebURL; 295f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebURLError; 296f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebURLRequest; 297f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebURLResponse; 298f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebUserGestureIndicator; 299f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebVector; 300f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebView; 301f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebWidget; 302f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebWindowFeatures; 303116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing blink::WebNetworkStateNotifier; 304116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing blink::WebRuntimeFeatures; 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::Time; 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::TimeDelta; 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 309f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebContentDetectionResult; 310f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebFloatPoint; 311f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebFloatRect; 312f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebHitTestResult; 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//----------------------------------------------------------------------------- 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 319f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)typedef std::map<blink::WebView*, RenderViewImpl*> ViewMap; 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static base::LazyInstance<ViewMap> g_view_map = LAZY_INSTANCE_INITIALIZER; 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef std::map<int32, RenderViewImpl*> RoutingIDViewMap; 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)static base::LazyInstance<RoutingIDViewMap> g_routing_id_view_map = 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LAZY_INSTANCE_INITIALIZER; 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Time, in seconds, we delay before sending content state changes (such as form 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// state and scroll position) to the browser. We delay sending changes to avoid 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// spamming the browser. 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// To avoid having tab/session restore require sending a message to get the 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// current content state during tab closing we use a shorter timeout for the 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// foreground renderer. This means there is a small window of time from which 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// content state is modified and not sent to session restore, but this is 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// better than having to wake up all renderers during shutdown. 33368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)const int kDelaySecondsForContentStateSyncHidden = 5; 33468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)const int kDelaySecondsForContentStateSync = 1; 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Delay between tapping in content and launching the associated android intent. 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Used to allow users see what has been recognized as content. 33968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)const size_t kContentIntentDelayMilliseconds = 700; 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)static RenderViewImpl* (*g_create_render_view_impl)(RenderViewImplParams*) = 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NULL; 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// static 3465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool RenderViewImpl::IsReload(const FrameMsg_Navigate_Params& params) { 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 3485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) params.navigation_type == FrameMsg_Navigate_Type::RELOAD || 3495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) params.navigation_type == FrameMsg_Navigate_Type::RELOAD_IGNORING_CACHE || 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.navigation_type == 3515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) FrameMsg_Navigate_Type::RELOAD_ORIGINAL_REQUEST_URL; 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 354bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch// static 355bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben MurdochReferrer RenderViewImpl::GetReferrerFromRequest( 356a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch WebFrame* frame, 357a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch const WebURLRequest& request) { 358a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch return Referrer(GURL(request.httpHeaderField(WebString::fromUTF8("Referer"))), 3595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) request.referrerPolicy()); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// static 363a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)WindowOpenDisposition RenderViewImpl::NavigationPolicyToDisposition( 3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebNavigationPolicy policy) { 3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (policy) { 366f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) case blink::WebNavigationPolicyIgnore: 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return IGNORE_ACTION; 368f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) case blink::WebNavigationPolicyDownload: 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return SAVE_TO_DISK; 370f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) case blink::WebNavigationPolicyCurrentTab: 3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CURRENT_TAB; 372f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) case blink::WebNavigationPolicyNewBackgroundTab: 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return NEW_BACKGROUND_TAB; 374f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) case blink::WebNavigationPolicyNewForegroundTab: 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return NEW_FOREGROUND_TAB; 376f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) case blink::WebNavigationPolicyNewWindow: 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return NEW_WINDOW; 378f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) case blink::WebNavigationPolicyNewPopup: 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return NEW_POPUP; 3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default: 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTREACHED() << "Unexpected WebNavigationPolicy"; 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return IGNORE_ACTION; 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 38690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Returns true if the device scale is high enough that losing subpixel 38790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// antialiasing won't have a noticeable effect on text quality. 38890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)static bool DeviceScaleEnsuresTextQuality(float device_scale_factor) { 38990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if defined(OS_ANDROID) 39090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // On Android, we never have subpixel antialiasing. 39190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return true; 39290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#else 39390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return device_scale_factor > 1.5f; 39490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif 39590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 39690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 39790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 39803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)static bool PreferCompositingToLCDText(float device_scale_factor) { 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const CommandLine& command_line = *CommandLine::ForCurrentProcess(); 40003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisablePreferCompositingToLCDText)) 4014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return false; 40203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (command_line.HasSwitch(switches::kEnablePreferCompositingToLCDText)) 403eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return true; 404a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (RenderThreadImpl::current() && 405a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) !RenderThreadImpl::current()->is_lcd_text_enabled()) 4068bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return true; 4078bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return DeviceScaleEnsuresTextQuality(device_scale_factor); 4088bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 4098bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 41090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)static bool ShouldUseTransitionCompositing(float device_scale_factor) { 41190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const CommandLine& command_line = *CommandLine::ForCurrentProcess(); 41290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 41390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (command_line.HasSwitch(switches::kDisableCompositingForTransition)) 41490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return false; 41590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 41690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (command_line.HasSwitch(switches::kEnableCompositingForTransition)) 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 419868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // TODO(ajuma): Re-enable this by default for high-DPI once the problem 420868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // of excessive layer promotion caused by overlap has been addressed. 421868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // http://crbug.com/178119. 422868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return false; 423c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 424c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 425f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static FaviconURL::IconType ToFaviconType(blink::WebIconURL::Type type) { 426c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) switch (type) { 427f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) case blink::WebIconURL::TypeFavicon: 428c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return FaviconURL::FAVICON; 429f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) case blink::WebIconURL::TypeTouch: 430c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return FaviconURL::TOUCH_ICON; 431f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) case blink::WebIconURL::TypeTouchPrecomposed: 432c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return FaviconURL::TOUCH_PRECOMPOSED_ICON; 433f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) case blink::WebIconURL::TypeInvalid: 434c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return FaviconURL::INVALID_ICON; 435c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 436c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return FaviconURL::INVALID_ICON; 4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 43923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)static void ConvertToFaviconSizes( 44023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const blink::WebVector<blink::WebSize>& web_sizes, 44123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) std::vector<gfx::Size>* sizes) { 4420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DCHECK(sizes->empty()); 4430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch sizes->reserve(web_sizes.size()); 44423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) for (size_t i = 0; i < web_sizes.size(); ++i) 44523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) sizes->push_back(gfx::Size(web_sizes[i])); 44623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 44723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct RenderViewImpl::PendingFileChooser { 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PendingFileChooser(const FileChooserParams& p, WebFileChooserCompletion* c) 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : params(p), 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) completion(c) { 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FileChooserParams params; 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebFileChooserCompletion* completion; // MAY BE NULL to skip callback. 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebWidgetLockTarget : public MouseLockDispatcher::LockTarget { 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 463f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) explicit WebWidgetLockTarget(blink::WebWidget* webwidget) 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : webwidget_(webwidget) {} 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnLockMouseACK(bool succeeded) OVERRIDE { 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (succeeded) 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webwidget_->didAcquirePointerLock(); 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webwidget_->didNotAcquirePointerLock(); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnMouseLockLost() OVERRIDE { 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webwidget_->didLosePointerLock(); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool HandleMouseLockedInputEvent( 478f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebMouseEvent &event) OVERRIDE { 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The WebWidget handles mouse lock in WebKit's handleInputEvent(). 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 484f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebWidget* webwidget_; 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 487c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool TouchEnabled() { 488c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Based on the definition of chrome::kEnableTouchIcon. 489c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_ANDROID) 490c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return true; 491c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#else 492c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return false; 493c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 494c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 495c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 496eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochWebDragData DropDataToWebDragData(const DropData& drop_data) { 497868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::vector<WebDragData::Item> item_list; 498868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 499868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // These fields are currently unused when dragging into WebKit. 500868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DCHECK(drop_data.download_metadata.empty()); 501868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DCHECK(drop_data.file_contents.empty()); 502868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DCHECK(drop_data.file_description_filename.empty()); 503868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 504868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (!drop_data.text.is_null()) { 505868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebDragData::Item item; 506868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) item.storageType = WebDragData::Item::StorageTypeString; 507868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) item.stringType = WebString::fromUTF8(ui::Clipboard::kMimeTypeText); 508868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) item.stringData = drop_data.text.string(); 509868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) item_list.push_back(item); 510868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 511868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 512868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // TODO(dcheng): Do we need to distinguish between null and empty URLs? Is it 513868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // meaningful to write an empty URL to the clipboard? 514868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (!drop_data.url.is_empty()) { 515868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebDragData::Item item; 516868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) item.storageType = WebDragData::Item::StorageTypeString; 517868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) item.stringType = WebString::fromUTF8(ui::Clipboard::kMimeTypeURIList); 518868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) item.stringData = WebString::fromUTF8(drop_data.url.spec()); 519868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) item.title = drop_data.url_title; 520868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) item_list.push_back(item); 521868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 522868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 523868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (!drop_data.html.is_null()) { 524868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebDragData::Item item; 525868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) item.storageType = WebDragData::Item::StorageTypeString; 526868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) item.stringType = WebString::fromUTF8(ui::Clipboard::kMimeTypeHTML); 527868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) item.stringData = drop_data.html.string(); 528868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) item.baseURL = drop_data.html_base_url; 529868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) item_list.push_back(item); 530868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 531868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 532effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch for (std::vector<ui::FileInfo>::const_iterator it = 533868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) drop_data.filenames.begin(); 534868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) it != drop_data.filenames.end(); 535868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ++it) { 536868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebDragData::Item item; 537868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) item.storageType = WebDragData::Item::StorageTypeFilename; 538effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch item.filenameData = it->path.AsUTF16Unsafe(); 539effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch item.displayNameData = it->display_name.AsUTF16Unsafe(); 540868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) item_list.push_back(item); 541868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 542868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 5430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch for (std::vector<DropData::FileSystemFileInfo>::const_iterator it = 5440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch drop_data.file_system_files.begin(); 5450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch it != drop_data.file_system_files.end(); 5460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ++it) { 5470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch WebDragData::Item item; 5480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch item.storageType = WebDragData::Item::StorageTypeFileSystemFile; 5490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch item.fileSystemURL = it->url; 5500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch item.fileSystemFileSize = it->size; 5510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch item_list.push_back(item); 5520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 5530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 554868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) for (std::map<base::string16, base::string16>::const_iterator it = 555868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) drop_data.custom_data.begin(); 556868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) it != drop_data.custom_data.end(); 557868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ++it) { 558868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebDragData::Item item; 559868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) item.storageType = WebDragData::Item::StorageTypeString; 560868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) item.stringType = it->first; 561868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) item.stringData = it->second; 562868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) item_list.push_back(item); 563868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 564868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 565868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebDragData result; 566868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) result.initialize(); 567868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) result.setItems(item_list); 568868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) result.setFilesystemId(drop_data.filesystem_id); 569868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return result; 570868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 571868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 572116680a4aac90f2aa7413d9095a592090648e557Ben Murdochtypedef void (*SetFontFamilyWrapper)(blink::WebSettings*, 573116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::string16&, 574116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UScriptCode); 575116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 576116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid SetStandardFontFamilyWrapper(WebSettings* settings, 577116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::string16& font, 578116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UScriptCode script) { 579116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setStandardFontFamily(font, script); 580116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 581116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 582116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid SetFixedFontFamilyWrapper(WebSettings* settings, 583116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::string16& font, 584116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UScriptCode script) { 585116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setFixedFontFamily(font, script); 586116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 587116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 588116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid SetSerifFontFamilyWrapper(WebSettings* settings, 589116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::string16& font, 590116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UScriptCode script) { 591116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setSerifFontFamily(font, script); 592116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 593116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 594116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid SetSansSerifFontFamilyWrapper(WebSettings* settings, 595116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::string16& font, 596116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UScriptCode script) { 597116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setSansSerifFontFamily(font, script); 598116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 599116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 600116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid SetCursiveFontFamilyWrapper(WebSettings* settings, 601116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::string16& font, 602116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UScriptCode script) { 603116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setCursiveFontFamily(font, script); 604116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 605116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 606116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid SetFantasyFontFamilyWrapper(WebSettings* settings, 607116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::string16& font, 608116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UScriptCode script) { 609116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setFantasyFontFamily(font, script); 610116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 611116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 612116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid SetPictographFontFamilyWrapper(WebSettings* settings, 613116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::string16& font, 614116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UScriptCode script) { 615116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setPictographFontFamily(font, script); 616116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 617116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 618116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// If |scriptCode| is a member of a family of "similar" script codes, returns 619116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// the script code in that family that is used by WebKit for font selection 620116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// purposes. For example, USCRIPT_KATAKANA_OR_HIRAGANA and USCRIPT_JAPANESE are 621116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// considered equivalent for the purposes of font selection. WebKit uses the 622116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// script code USCRIPT_KATAKANA_OR_HIRAGANA. So, if |scriptCode| is 623116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// USCRIPT_JAPANESE, the function returns USCRIPT_KATAKANA_OR_HIRAGANA. WebKit 624116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// uses different scripts than the ones in Chrome pref names because the version 625116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// of ICU included on certain ports does not have some of the newer scripts. If 626116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// |scriptCode| is not a member of such a family, returns |scriptCode|. 627116680a4aac90f2aa7413d9095a592090648e557Ben MurdochUScriptCode GetScriptForWebSettings(UScriptCode scriptCode) { 628116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch switch (scriptCode) { 629116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch case USCRIPT_HIRAGANA: 630116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch case USCRIPT_KATAKANA: 631116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch case USCRIPT_JAPANESE: 632116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return USCRIPT_KATAKANA_OR_HIRAGANA; 633116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch case USCRIPT_KOREAN: 634116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return USCRIPT_HANGUL; 635116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch default: 636116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return scriptCode; 637116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 638116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 639116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 640116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid ApplyFontsFromMap(const ScriptFontFamilyMap& map, 641116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetFontFamilyWrapper setter, 642116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch WebSettings* settings) { 643116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch for (ScriptFontFamilyMap::const_iterator it = map.begin(); it != map.end(); 644116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ++it) { 645116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int32 script = u_getPropertyValueEnum(UCHAR_SCRIPT, (it->first).c_str()); 646116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (script >= 0 && script < USCRIPT_CODE_LIMIT) { 647116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UScriptCode code = static_cast<UScriptCode>(script); 648116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch (*setter)(settings, it->second, GetScriptForWebSettings(code)); 649116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 650116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 651116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 652116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)RenderViewImpl::RenderViewImpl(RenderViewImplParams* params) 656f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) : RenderWidget(blink::WebPopupTypeNone, 657e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba params->initial_size.screen_info, 6583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) params->swapped_out, 6590529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch params->hidden, 6600529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch params->never_visible), 6612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webkit_preferences_(params->webkit_prefs), 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) send_content_state_immediately_(false), 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enabled_bindings_(0), 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) send_preferred_size_changes_(false), 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) navigation_gesture_(NavigationGestureUnknown), 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) opened_by_user_gesture_(true), 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) opener_suppressed_(false), 668f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) suppress_dialogs_until_swap_out_(false), 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) page_id_(-1), 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_page_id_sent_to_browser_(-1), 6712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) next_page_id_(params->next_page_id), 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history_list_offset_(-1), 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history_list_length_(0), 674effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch frames_in_progress_(0), 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target_url_status_(TARGET_NONE), 676f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) uses_temporary_zoom_level_(false), 6777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(OS_ANDROID) 6787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) top_controls_constraints_(cc::BOTH), 6797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif 680a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) has_scrolled_focused_editable_node_into_rect_(false), 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) speech_recognition_dispatcher_(NULL), 6822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser_plugin_manager_(NULL), 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) devtools_agent_(NULL), 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_lock_dispatcher_(NULL), 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_content_intent_id_(0), 687c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 688c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_WIN) 689c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) focused_plugin_id_(-1), 690c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 6913240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#if defined(ENABLE_PLUGINS) 69223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) plugin_find_handler_(NULL), 6933240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch focused_pepper_plugin_(NULL), 6943240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch pepper_last_mouse_event_target_(NULL), 6953240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#endif 6962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) enumeration_completion_id_(0), 6972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) session_storage_namespace_id_(params->session_storage_namespace_id), 698a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) next_snapshot_id_(0) { 6992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid RenderViewImpl::Initialize(RenderViewImplParams* params) { 7022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) routing_id_ = params->routing_id; 7032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) surface_id_ = params->surface_id; 7042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (params->opener_id != MSG_ROUTING_NONE && params->is_renderer_created) 7052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) opener_id_ = params->opener_id; 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure we start with a valid next_page_id_ from the browser. 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_GE(next_page_id_, 0); 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 71046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) main_render_frame_.reset(RenderFrameImpl::Create( 71146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) this, params->main_frame_routing_id)); 7125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // The main frame WebLocalFrame object is closed by 7135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // RenderFrameImpl::frameDetached(). 71446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) WebLocalFrame* web_frame = WebLocalFrame::create(main_render_frame_.get()); 71546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) main_render_frame_->SetWebFrame(web_frame); 7165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webwidget_ = WebView::create(this); 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webwidget_mouse_lock_target_.reset(new WebWidgetLockTarget(webwidget_)); 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CommandLine& command_line = *CommandLine::ForCurrentProcess(); 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 722868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (command_line.HasSwitch(switches::kStatsCollectionController)) 723868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) stats_collection_observer_.reset(new StatsCollectionObserver(this)); 724868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string region_code = 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line.HasSwitch(switches::kNetworkCountryIso) 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ? command_line.GetSwitchValueASCII(switches::kNetworkCountryIso) 72934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) : net::android::GetTelephonyNetworkCountryIso(); 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_detectors_.push_back(linked_ptr<ContentDetector>( 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new AddressDetector())); 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_detectors_.push_back(linked_ptr<ContentDetector>( 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new PhoneNumberDetector(region_code))); 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_detectors_.push_back(linked_ptr<ContentDetector>( 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new EmailDetector())); 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderThread::Get()->AddRoute(routing_id_, this); 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Take a reference on behalf of the RenderThread. This will be balanced 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // when we receive ViewMsg_ClosePage. 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddRef(); 7425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (RenderThreadImpl::current()) { 7435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RenderThreadImpl::current()->WidgetCreated(); 7445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (is_hidden_) 7455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RenderThreadImpl::current()->WidgetHidden(); 7465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If this is a popup, we must wait for the CreatingNew_ACK message before 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // completing initialization. Otherwise, we can finish it now. 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (opener_id_ == MSG_ROUTING_NONE) { 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) did_show_ = true; 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CompleteInit(); 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) g_view_map.Get().insert(std::make_pair(webview(), this)); 7562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) g_routing_id_view_map.Get().insert(std::make_pair(routing_id_, this)); 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webview()->setDeviceScaleFactor(device_scale_factor_); 75803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) webview()->settings()->setPreferCompositingToLCDTextEnabled( 75903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) PreferCompositingToLCDText(device_scale_factor_)); 76090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) webview()->settings()->setAcceleratedCompositingForTransitionEnabled( 76190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ShouldUseTransitionCompositing(device_scale_factor_)); 7621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci webview()->settings()->setThreadedScrollingEnabled( 7631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci !command_line.HasSwitch(switches::kDisableThreadedScrolling)); 7642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ApplyWebPreferences(webkit_preferences_, webview()); 7664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 7675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu webview()->settings()->setAllowConnectingInsecureWebSocket( 7685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu command_line.HasSwitch(switches::kAllowInsecureWebSocketFromHttpsOrigin)); 7695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 7705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) RenderFrameProxy* proxy = NULL; 7715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (params->proxy_routing_id != MSG_ROUTING_NONE) { 7725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CHECK(params->swapped_out); 7735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) proxy = RenderFrameProxy::CreateProxyToReplaceFrame( 7745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) main_render_frame_.get(), params->proxy_routing_id); 7755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) main_render_frame_->set_render_frame_proxy(proxy); 7765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 7775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // In --site-per-process, just use the WebRemoteFrame as the main frame. 7795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kSitePerProcess) && 7805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) proxy) { 7815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) webview()->setMainFrame(proxy->web_frame()); 7825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 7835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) webview()->setMainFrame(main_render_frame_->GetWebFrame()); 7845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 785a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch main_render_frame_->Initialize(); 7862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 787c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (switches::IsTouchDragDropEnabled()) 7882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webview()->settings()->setTouchDragDropEnabled(true); 7892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 790c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (switches::IsTouchEditingEnabled()) 791c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) webview()->settings()->setTouchEditingEnabled(true); 792c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!params->frame_name.empty()) 7942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webview()->mainFrame()->setName(params->frame_name); 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7960529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // TODO(davidben): Move this state from Blink into content. 7970529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if (params->window_was_created_with_opener) 7980529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch webview()->setOpenedByDOM(); 7990529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 8002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnSetRendererPrefs(params->renderer_prefs); 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 802e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba if (!params->enable_auto_resize) { 803e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba OnResize(params->initial_size); 804e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba } else { 805e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba OnEnableAutoResize(params->min_size, params->max_size); 806e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba } 807e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new MHTMLGenerator(this); 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new TextInputClientObserver(this); 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_MACOSX) 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The next group of objects all implement RenderViewObserver, so are deleted 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // along with the RenderView automatically. 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) devtools_agent_ = new DevToolsAgent(this); 816a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch if (RenderWidgetCompositor* rwc = compositor()) { 817a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch webview()->devToolsAgent()->setLayerTreeId(rwc->GetLayerTreeId()); 818a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch } 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_lock_dispatcher_ = new RenderViewMouseLockDispatcher(this); 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 821a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch history_controller_.reset(new HistoryController(this)); 822a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new IdleUserDetector(this); 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (command_line.HasSwitch(switches::kDomAutomationController)) 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enabled_bindings_ |= BINDINGS_POLICY_DOM_AUTOMATION; 827868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (command_line.HasSwitch(switches::kStatsCollectionController)) 828868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) enabled_bindings_ |= BINDINGS_POLICY_STATS_COLLECTION; 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProcessViewLayoutFlags(command_line); 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetContentClient()->renderer()->RenderViewCreated(this); 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If we have an opener_id but we weren't created by a renderer, then 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it's the browser asking us to set our opener to another RenderView. 8362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (params->opener_id != MSG_ROUTING_NONE && !params->is_renderer_created) { 8372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderViewImpl* opener_view = FromRoutingID(params->opener_id); 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (opener_view) 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webview()->mainFrame()->setOpener(opener_view->webview()->mainFrame()); 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If we are initially swapped out, navigate to kSwappedOutURL. 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This ensures we are in a unique origin that others cannot script. 8445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (is_swapped_out_ && webview()->mainFrame()->isWebLocalFrame()) 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateToSwappedOutURL(webview()->mainFrame()); 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RenderViewImpl::~RenderViewImpl() { 8490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch for (BitmapMap::iterator it = disambiguation_bitmaps_.begin(); 8500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch it != disambiguation_bitmaps_.end(); 8510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ++it) 8520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch delete it->second; 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history_page_ids_.clear(); 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::debug::TraceLog::GetInstance()->RemoveProcessLabel(routing_id_); 8567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If file chooser is still waiting for answer, dispatch empty answer. 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (!file_chooser_completions_.empty()) { 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (file_chooser_completions_.front()->completion) { 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file_chooser_completions_.front()->completion->didChooseFile( 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebVector<WebString>()); 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file_chooser_completions_.pop_front(); 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_ANDROID) 8672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The date/time picker client is both a scoped_ptr member of this class and 8682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // a RenderViewObserver. Reset it to prevent double deletion. 8692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) date_time_picker_client_.reset(); 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NDEBUG 8732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Make sure we are no longer referenced by the ViewMap or RoutingIDViewMap. 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ViewMap* views = g_view_map.Pointer(); 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (ViewMap::iterator it = views->begin(); it != views->end(); ++it) 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_NE(this, it->second) << "Failed to call Close?"; 8772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RoutingIDViewMap* routing_id_views = g_routing_id_view_map.Pointer(); 8782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (RoutingIDViewMap::iterator it = routing_id_views->begin(); 8792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) it != routing_id_views->end(); ++it) 8802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK_NE(this, it->second) << "Failed to call Close?"; 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FOR_EACH_OBSERVER(RenderViewObserver, observers_, RenderViewGone()); 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FOR_EACH_OBSERVER(RenderViewObserver, observers_, OnDestruct()); 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*static*/ 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RenderViewImpl* RenderViewImpl::FromWebView(WebView* webview) { 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ViewMap* views = g_view_map.Pointer(); 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ViewMap::iterator it = views->find(webview); 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return it == views->end() ? NULL : it->second; 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*static*/ 895f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)RenderView* RenderView::FromWebView(blink::WebView* webview) { 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return RenderViewImpl::FromWebView(webview); 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*static*/ 9002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)RenderViewImpl* RenderViewImpl::FromRoutingID(int32 routing_id) { 9012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RoutingIDViewMap* views = g_routing_id_view_map.Pointer(); 9022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RoutingIDViewMap::iterator it = views->find(routing_id); 9032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return it == views->end() ? NULL : it->second; 9042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 9052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/*static*/ 9072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)RenderView* RenderView::FromRoutingID(int routing_id) { 9082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return RenderViewImpl::FromRoutingID(routing_id); 9092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 9102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 911f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)/* static */ 912f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)size_t RenderViewImpl::GetRenderViewCount() { 913f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return g_view_map.Get().size(); 914f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 915f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 9162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/*static*/ 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderView::ForEach(RenderViewVisitor* visitor) { 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ViewMap* views = g_view_map.Pointer(); 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (ViewMap::iterator it = views->begin(); it != views->end(); ++it) { 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!visitor->Visit(it->second)) 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*static*/ 926116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid RenderView::ApplyWebPreferences(const WebPreferences& prefs, 927116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch WebView* web_view) { 928116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch WebSettings* settings = web_view->settings(); 929116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ApplyFontsFromMap(prefs.standard_font_family_map, 930116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetStandardFontFamilyWrapper, settings); 931116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ApplyFontsFromMap(prefs.fixed_font_family_map, 932116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetFixedFontFamilyWrapper, settings); 933116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ApplyFontsFromMap(prefs.serif_font_family_map, 934116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetSerifFontFamilyWrapper, settings); 935116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ApplyFontsFromMap(prefs.sans_serif_font_family_map, 936116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetSansSerifFontFamilyWrapper, settings); 937116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ApplyFontsFromMap(prefs.cursive_font_family_map, 938116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetCursiveFontFamilyWrapper, settings); 939116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ApplyFontsFromMap(prefs.fantasy_font_family_map, 940116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetFantasyFontFamilyWrapper, settings); 941116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ApplyFontsFromMap(prefs.pictograph_font_family_map, 942116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetPictographFontFamilyWrapper, settings); 943116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setDefaultFontSize(prefs.default_font_size); 944116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setDefaultFixedFontSize(prefs.default_fixed_font_size); 945116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setMinimumFontSize(prefs.minimum_font_size); 946116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setMinimumLogicalFontSize(prefs.minimum_logical_font_size); 947116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setDefaultTextEncodingName( 948116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::ASCIIToUTF16(prefs.default_encoding)); 949116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setJavaScriptEnabled(prefs.javascript_enabled); 950116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setWebSecurityEnabled(prefs.web_security_enabled); 951116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setJavaScriptCanOpenWindowsAutomatically( 952116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs.javascript_can_open_windows_automatically); 953116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setLoadsImagesAutomatically(prefs.loads_images_automatically); 954116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setImagesEnabled(prefs.images_enabled); 955116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setPluginsEnabled(prefs.plugins_enabled); 956116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setDOMPasteAllowed(prefs.dom_paste_enabled); 957116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setShrinksStandaloneImagesToFit( 958116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs.shrinks_standalone_images_to_fit); 959116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setUsesEncodingDetector(prefs.uses_universal_detector); 960116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setTextAreasAreResizable(prefs.text_areas_are_resizable); 961116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setAllowScriptsToCloseWindows(prefs.allow_scripts_to_close_windows); 962116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setDownloadableBinaryFontsEnabled(prefs.remote_fonts_enabled); 963116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setJavaScriptCanAccessClipboard( 964116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs.javascript_can_access_clipboard); 965116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch WebRuntimeFeatures::enableXSLT(prefs.xslt_enabled); 966116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setXSSAuditorEnabled(prefs.xss_auditor_enabled); 967116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setDNSPrefetchingEnabled(prefs.dns_prefetching_enabled); 968116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setLocalStorageEnabled(prefs.local_storage_enabled); 969116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setSyncXHRInDocumentsEnabled(prefs.sync_xhr_in_documents_enabled); 970116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch WebRuntimeFeatures::enableDatabase(prefs.databases_enabled); 971116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setOfflineWebApplicationCacheEnabled( 972116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs.application_cache_enabled); 973116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setCaretBrowsingEnabled(prefs.caret_browsing_enabled); 974116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setHyperlinkAuditingEnabled(prefs.hyperlink_auditing_enabled); 975116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setCookieEnabled(prefs.cookie_enabled); 976116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setNavigateOnDragDrop(prefs.navigate_on_drag_drop); 977116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 978116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setJavaEnabled(prefs.java_enabled); 979116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 980116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // By default, allow_universal_access_from_file_urls is set to false and thus 981116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // we mitigate attacks from local HTML files by not granting file:// URLs 982116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // universal access. Only test shell will enable this. 983116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setAllowUniversalAccessFromFileURLs( 984116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs.allow_universal_access_from_file_urls); 985116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setAllowFileAccessFromFileURLs( 986116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs.allow_file_access_from_file_urls); 987116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 988116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Enable the web audio API if requested on the command line. 989116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setWebAudioEnabled(prefs.webaudio_enabled); 990116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 991116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Enable experimental WebGL support if requested on command line 992116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // and support is compiled in. 993116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setExperimentalWebGLEnabled(prefs.experimental_webgl_enabled); 994116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 995116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Disable GL multisampling if requested on command line. 996116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setOpenGLMultisamplingEnabled(prefs.gl_multisampling_enabled); 997116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 998116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Enable WebGL errors to the JS console if requested. 999116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setWebGLErrorsToConsoleEnabled( 1000116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs.webgl_errors_to_console_enabled); 1001116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1002116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Uses the mock theme engine for scrollbars. 1003116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setMockScrollbarsEnabled(prefs.mock_scrollbars_enabled); 1004116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1005116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setLayerSquashingEnabled(prefs.layer_squashing_enabled); 1006116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1007116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Enable gpu-accelerated 2d canvas if requested on the command line. 1008116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setAccelerated2dCanvasEnabled(prefs.accelerated_2d_canvas_enabled); 1009116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1010116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setMinimumAccelerated2dCanvasSize( 1011116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs.minimum_accelerated_2d_canvas_size); 1012116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1013116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Disable antialiasing for 2d canvas if requested on the command line. 1014116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setAntialiased2dCanvasEnabled( 1015116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch !prefs.antialiased_2d_canvas_disabled); 1016116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1017116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Set MSAA sample count for 2d canvas if requested on the command line (or 1018116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // default value if not). 1019116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setAccelerated2dCanvasMSAASampleCount( 1020116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs.accelerated_2d_canvas_msaa_sample_count); 1021116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1022116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Enable deferred filter rendering if requested on the command line. 1023116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setDeferredFiltersEnabled(prefs.deferred_filters_enabled); 1024116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1025116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Enable container culling if requested on the command line. 1026116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setContainerCullingEnabled(prefs.container_culling_enabled); 1027116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1028116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setAsynchronousSpellCheckingEnabled( 1029116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs.asynchronous_spell_checking_enabled); 1030116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setUnifiedTextCheckerEnabled(prefs.unified_textchecker_enabled); 1031116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1032116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Tabs to link is not part of the settings. WebCore calls 1033116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // ChromeClient::tabsToLinks which is part of the glue code. 1034116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_view->setTabsToLinks(prefs.tabs_to_links); 1035116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1036116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setAllowDisplayOfInsecureContent( 1037116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs.allow_displaying_insecure_content); 1038116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setAllowRunningOfInsecureContent( 1039116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs.allow_running_insecure_content); 1040116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setPasswordEchoEnabled(prefs.password_echo_enabled); 1041116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setShouldPrintBackgrounds(prefs.should_print_backgrounds); 1042116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setShouldClearDocumentBackground( 1043116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs.should_clear_document_background); 1044116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setEnableScrollAnimator(prefs.enable_scroll_animator); 1045116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1046116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setRegionBasedColumnsEnabled(prefs.region_based_columns_enabled); 1047116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1048116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch WebRuntimeFeatures::enableTouch(prefs.touch_enabled); 1049116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setMaxTouchPoints(prefs.pointer_events_max_touch_points); 1050116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setDeviceSupportsTouch(prefs.device_supports_touch); 1051116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setDeviceSupportsMouse(prefs.device_supports_mouse); 1052116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setEnableTouchAdjustment(prefs.touch_adjustment_enabled); 1053116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1054116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setDeferredImageDecodingEnabled( 1055116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs.deferred_image_decoding_enabled); 1056116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setShouldRespectImageOrientation( 1057116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs.should_respect_image_orientation); 1058116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1059116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setUnsafePluginPastingEnabled(false); 1060116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setEditingBehavior( 1061116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch static_cast<WebSettings::EditingBehavior>(prefs.editing_behavior)); 1062116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1063116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setSupportsMultipleWindows(prefs.supports_multiple_windows); 1064116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1065116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setViewportEnabled(prefs.viewport_enabled); 1066116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setLoadWithOverviewMode(prefs.initialize_at_minimum_page_scale); 1067116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setViewportMetaEnabled(prefs.viewport_meta_enabled); 1068116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setMainFrameResizesAreOrientationChanges( 1069116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs.main_frame_resizes_are_orientation_changes); 1070116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1071116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setSmartInsertDeleteEnabled(prefs.smart_insert_delete_enabled); 1072116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1073116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setSpatialNavigationEnabled(prefs.spatial_navigation_enabled); 1074116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1075116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setSelectionIncludesAltImageText(true); 1076116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 10776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) settings->setV8CacheOptions( 10786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) static_cast<WebSettings::V8CacheOptions>(prefs.v8_cache_options)); 10796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 10801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci settings->setV8ScriptStreamingEnabled(prefs.v8_script_streaming_enabled); 10811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1082116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_ANDROID) 1083116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setAllowCustomScrollbarInMainFrame(false); 1084116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setTextAutosizingEnabled(prefs.text_autosizing_enabled); 1085116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setAccessibilityFontScaleFactor(prefs.font_scale_factor); 1086116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setDeviceScaleAdjustment(prefs.device_scale_adjustment); 10875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) settings->setDisallowFullscreenForNonMediaElements( 10885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) prefs.disallow_fullscreen_for_non_media_elements); 10896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) settings->setFullscreenSupported(prefs.fullscreen_supported); 1090116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_view->setIgnoreViewportTagScaleLimits(prefs.force_enable_zoom); 1091116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setAutoZoomFocusedNodeToLegibleScale(true); 1092116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setDoubleTapToZoomEnabled(prefs.double_tap_to_zoom_enabled); 1093116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setMediaControlsOverlayPlayButtonEnabled(true); 1094116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setMediaPlaybackRequiresUserGesture( 1095116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs.user_gesture_required_for_media_playback); 1096116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setDefaultVideoPosterURL( 1097116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::ASCIIToUTF16(prefs.default_video_poster_url.spec())); 1098116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setSupportDeprecatedTargetDensityDPI( 1099116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs.support_deprecated_target_density_dpi); 1100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setUseLegacyBackgroundSizeShorthandBehavior( 1101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs.use_legacy_background_size_shorthand_behavior); 1102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setWideViewportQuirkEnabled(prefs.wide_viewport_quirk); 1103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setUseWideViewport(prefs.use_wide_viewport); 11046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) settings->setForceZeroLayoutHeight(prefs.force_zero_layout_height); 1105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setViewportMetaLayoutSizeQuirk( 1106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs.viewport_meta_layout_size_quirk); 1107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setViewportMetaMergeContentQuirk( 1108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs.viewport_meta_merge_content_quirk); 1109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setViewportMetaNonUserScalableQuirk( 1110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs.viewport_meta_non_user_scalable_quirk); 1111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setViewportMetaZeroValuesQuirk( 1112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs.viewport_meta_zero_values_quirk); 1113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setClobberUserAgentInitialScaleQuirk( 1114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs.clobber_user_agent_initial_scale_quirk); 1115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setIgnoreMainFrameOverflowHiddenQuirk( 1116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs.ignore_main_frame_overflow_hidden_quirk); 1117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setReportScreenSizeInPhysicalPixelsQuirk( 1118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs.report_screen_size_in_physical_pixels_quirk); 1119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setMainFrameClipsContent(false); 1120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setShrinksStandaloneImagesToFit(false); 1121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setShrinksViewportContentToFit(true); 1122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch WebNetworkStateNotifier::setOnLine(prefs.is_online); 1125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch WebNetworkStateNotifier::setWebConnectionType( 1126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch NetConnectionTypeToWebConnectionType(prefs.connection_type)); 1127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setPinchVirtualViewportEnabled( 1128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs.pinch_virtual_viewport_enabled); 1129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setPinchOverlayScrollbarThickness( 1131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs.pinch_overlay_scrollbar_thickness); 1132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings->setUseSolidColorScrollbars(prefs.use_solid_color_scrollbars); 1133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 1134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/*static*/ 11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RenderViewImpl* RenderViewImpl::Create( 11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 opener_id, 11380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch bool window_was_created_with_opener, 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const RendererPreferences& renderer_prefs, 11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebPreferences& webkit_prefs, 11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 routing_id, 1142868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int32 main_frame_routing_id, 11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 surface_id, 11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 session_storage_namespace_id, 1145a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& frame_name, 11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_renderer_created, 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool swapped_out, 1148cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int32 proxy_routing_id, 11493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool hidden, 11500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch bool never_visible, 11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 next_page_id, 1152e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba const ViewMsg_Resize_Params& initial_size, 1153e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba bool enable_auto_resize, 1154e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba const gfx::Size& min_size, 1155e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba const gfx::Size& max_size) { 11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(routing_id != MSG_ROUTING_NONE); 1157a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RenderViewImplParams params(opener_id, 11580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch window_was_created_with_opener, 1159a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) renderer_prefs, 1160a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) webkit_prefs, 1161a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) routing_id, 1162a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) main_frame_routing_id, 1163a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) surface_id, 1164a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) session_storage_namespace_id, 1165a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) frame_name, 1166a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) is_renderer_created, 1167a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) swapped_out, 1168cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) proxy_routing_id, 1169a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) hidden, 11700529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch never_visible, 1171a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) next_page_id, 1172e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba initial_size, 1173e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba enable_auto_resize, 1174e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba min_size, 1175e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba max_size); 11762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderViewImpl* render_view = NULL; 11772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (g_create_render_view_impl) 11782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) render_view = g_create_render_view_impl(¶ms); 11792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else 11802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) render_view = new RenderViewImpl(¶ms); 1181a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 11825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu render_view->Initialize(¶ms); 11832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return render_view; 11842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 11852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 11872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewImpl::InstallCreateHook( 11882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderViewImpl* (*create_render_view_impl)(RenderViewImplParams*)) { 11892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK(!g_create_render_view_impl); 11902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) g_create_render_view_impl = create_render_view_impl; 11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::AddObserver(RenderViewObserver* observer) { 11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observers_.AddObserver(observer); 11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::RemoveObserver(RenderViewObserver* observer) { 11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer->RenderViewGone(); 11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observers_.RemoveObserver(observer); 12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1202f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebView* RenderViewImpl::webview() const { 1203f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return static_cast<blink::WebView*>(webwidget()); 12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12063240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#if defined(ENABLE_PLUGINS) 12075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void RenderViewImpl::PepperInstanceCreated( 12085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PepperPluginInstanceImpl* instance) { 12095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) active_pepper_instances_.insert(instance); 12105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 12115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 12125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void RenderViewImpl::PepperInstanceDeleted( 12135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PepperPluginInstanceImpl* instance) { 12145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) active_pepper_instances_.erase(instance); 12155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 12165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (pepper_last_mouse_event_target_ == instance) 12175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) pepper_last_mouse_event_target_ = NULL; 12185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (focused_pepper_plugin_ == instance) 12195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PepperFocusChanged(instance, false); 12205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 12215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 12225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void RenderViewImpl::PepperFocusChanged(PepperPluginInstanceImpl* instance, 12235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool focused) { 12245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (focused) 12255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) focused_pepper_plugin_ = instance; 12265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) else if (focused_pepper_plugin_ == instance) 12275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) focused_pepper_plugin_ = NULL; 12285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 12291675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch UpdateTextInputType(); 12305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) UpdateSelectionBounds(); 12315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 12325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::RegisterPluginDelegate(WebPluginDelegateProxy* delegate) { 12345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_delegates_.insert(delegate); 12355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the renderer is visible, set initial visibility and focus state. 12365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!is_hidden()) { 12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate->SetContainerVisibility(true); 12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (webview() && webview()->isActive()) 12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate->SetWindowFocus(true); 12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Plugins start assuming the content has focus (so that they work in 12445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // environments where RenderView isn't hosting them), so we always have to 12455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // set the initial state. See webplugin_delegate_impl.h for details. 12465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate->SetContentAreaFocus(has_focus()); 12475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::UnregisterPluginDelegate( 12505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebPluginDelegateProxy* delegate) { 12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_delegates_.erase(delegate); 12525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1254bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#if defined(OS_WIN) 1255bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochvoid RenderViewImpl::PluginFocusChanged(bool focused, int plugin_id) { 1256bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch if (focused) 1257bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch focused_plugin_id_ = plugin_id; 1258bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch else 1259bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch focused_plugin_id_ = -1; 1260bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch} 1261bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#endif 1262bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 1263bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#if defined(OS_MACOSX) 1264bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochvoid RenderViewImpl::PluginFocusChanged(bool focused, int plugin_id) { 1265bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch Send(new ViewHostMsg_PluginFocusChanged(routing_id(), focused, plugin_id)); 1266bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch} 1267bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 12686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void RenderViewImpl::OnGetRenderedText() { 12696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (!webview()) 12706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return; 12716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Get rendered text from WebLocalFrame. 12726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // TODO: Currently IPC truncates any data that has a 12736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // size > kMaximumMessageSize. May be split the text into smaller chunks and 12746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // send back using multiple IPC. See http://crbug.com/393444. 12756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) static const size_t kMaximumMessageSize = 8 * 1024 * 1024; 12766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string text = webview()->mainFrame()->contentAsText( 12776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) kMaximumMessageSize).utf8(); 12786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 12796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Send(new ViewMsg_GetRenderedTextCompleted(routing_id(), text)); 12806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 12816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1282bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochvoid RenderViewImpl::StartPluginIme() { 1283bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch IPC::Message* msg = new ViewHostMsg_StartPluginIme(routing_id()); 1284bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // This message can be sent during event-handling, and needs to be delivered 1285bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // within that context. 1286bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch msg->set_unblock(true); 1287bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch Send(msg); 1288bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch} 1289bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#endif // defined(OS_MACOSX) 1290bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 1291bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#endif // ENABLE_PLUGINS 1292bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 12935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::TransferActiveWheelFlingAnimation( 1294f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebActiveWheelFlingParameters& params) { 12955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (webview()) 12965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webview()->transferActiveWheelFlingAnimation(params); 12975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderViewImpl::HasIMETextFocus() { 13005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetTextInputType() != ui::TEXT_INPUT_TYPE_NONE; 13015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderViewImpl::OnMessageReceived(const IPC::Message& message) { 13045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebFrame* main_frame = webview() ? webview()->mainFrame() : NULL; 13055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (main_frame && main_frame->isWebLocalFrame()) 13065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetContentClient()->SetActiveURL(main_frame->document().url()); 13075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ObserverListBase<RenderViewObserver>::Iterator it(observers_); 13095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewObserver* observer; 13105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while ((observer = it.GetNext()) != NULL) 13115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (observer->OnMessageReceived(message)) 13125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 13135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool handled = true; 1315cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IPC_BEGIN_MESSAGE_MAP(RenderViewImpl, message) 1316c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IPC_MESSAGE_HANDLER(InputMsg_ExecuteEditCommand, OnExecuteEditCommand) 1317c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IPC_MESSAGE_HANDLER(InputMsg_MoveCaret, OnMoveCaret) 1318c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IPC_MESSAGE_HANDLER(InputMsg_ScrollFocusedEditableNodeIntoRect, 1319c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OnScrollFocusedEditableNodeIntoRect) 1320c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IPC_MESSAGE_HANDLER(InputMsg_SetEditCommandsForNextKeyEvent, 1321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OnSetEditCommandsForNextKeyEvent) 13225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_CopyImageAt, OnCopyImageAt) 1323010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_SaveImageAt, OnSaveImageAt) 13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_Find, OnFind) 13255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_StopFinding, OnStopFinding) 13265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_Zoom, OnZoom) 13275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_SetZoomLevelForLoadingURL, 13285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnSetZoomLevelForLoadingURL) 1329f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_SetZoomLevelForView, 1330f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) OnSetZoomLevelForView) 13315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_SetPageEncoding, OnSetPageEncoding) 13325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_ResetPageEncodingToDefault, 13335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnResetPageEncodingToDefault) 13345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_PostMessageEvent, OnPostMessageEvent) 13355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(DragMsg_TargetDragEnter, OnDragTargetDragEnter) 13365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(DragMsg_TargetDragOver, OnDragTargetDragOver) 13375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(DragMsg_TargetDragLeave, OnDragTargetDragLeave) 13385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(DragMsg_TargetDrop, OnDragTargetDrop) 1339c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch IPC_MESSAGE_HANDLER(DragMsg_SourceEnded, OnDragSourceEnded) 13405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(DragMsg_SourceSystemDragEnded, 13415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnDragSourceSystemDragEnded) 13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_AllowBindings, OnAllowBindings) 13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_SetInitialFocus, OnSetInitialFocus) 13445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_UpdateTargetURL_ACK, OnUpdateTargetURLAck) 13455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_UpdateWebPreferences, OnUpdateWebPreferences) 13465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_EnumerateDirectoryResponse, 13475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnEnumerateDirectoryResponse) 13485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_RunFileChooserResponse, OnFileChooserResponse) 1349f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_SuppressDialogsUntilSwapOut, 1350f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OnSuppressDialogsUntilSwapOut) 13515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_ClosePage, OnClosePage) 13525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_ThemeChanged, OnThemeChanged) 13535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_MoveOrResizeStarted, OnMoveOrResizeStarted) 1354a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_ClearFocusedElement, OnClearFocusedElement) 1355cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_SetBackgroundOpaque, OnSetBackgroundOpaque) 13565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_EnablePreferredSizeChangedMode, 13575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnEnablePreferredSizeChangedMode) 13585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_EnableAutoResize, OnEnableAutoResize) 13595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_DisableAutoResize, OnDisableAutoResize) 13605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_DisableScrollbarsForSmallWindows, 13615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnDisableScrollbarsForSmallWindows) 13625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_SetRendererPrefs, OnSetRendererPrefs) 13635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_MediaPlayerActionAt, OnMediaPlayerActionAt) 13645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_PluginActionAt, OnPluginActionAt) 13655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_SetActive, OnSetActive) 13665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_GetAllSavableResourceLinksForCurrentPage, 13675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnGetAllSavableResourceLinksForCurrentPage) 13685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER( 13695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ViewMsg_GetSerializedHtmlDataForCurrentPageWithLocalLinks, 13705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnGetSerializedHtmlDataForCurrentPageWithLocalLinks) 1371c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_ShowContextMenu, OnShowContextMenu) 13725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(viettrungluu): Move to a separate message filter. 13735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_SetHistoryLengthAndPrune, 13745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnSetHistoryLengthAndPrune) 13755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_EnableViewSourceMode, OnEnableViewSourceMode) 13760529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch IPC_MESSAGE_HANDLER(ViewMsg_ReleaseDisambiguationPopupBitmap, 13770529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch OnReleaseDisambiguationPopupBitmap) 13781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_WindowSnapshotCompleted, 13791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) OnWindowSnapshotCompleted) 1380116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch IPC_MESSAGE_HANDLER(ViewMsg_ForceRedraw, OnForceRedraw) 1381cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_SelectWordAroundCaret, OnSelectWordAroundCaret) 13825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 1383c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IPC_MESSAGE_HANDLER(InputMsg_ActivateNearestFindResult, 13845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnActivateNearestFindResult) 13855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_FindMatchRects, OnFindMatchRects) 1386c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_UpdateTopControlsState, 1387c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OnUpdateTopControlsState) 13885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_ExtractSmartClipData, OnExtractSmartClipData) 13895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 13906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_GetRenderedText, 13916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) OnGetRenderedText) 13925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_PluginImeCompositionCompleted, 13935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnPluginImeCompositionCompleted) 13945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_SetInLiveResize, OnSetInLiveResize) 13955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_SetWindowVisibility, OnSetWindowVisibility) 13965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewMsg_WindowFrameChanged, OnWindowFrameChanged) 13975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 13981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Adding a new message? Add platform independent ones first, then put the 13991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // platform specific ones at the end. 14005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Have the super handle all other messages. 14025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_UNHANDLED(handled = RenderWidget::OnMessageReceived(message)) 14035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_END_MESSAGE_MAP() 14045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return handled; 14065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1408cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void RenderViewImpl::OnSelectWordAroundCaret() { 1409cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!webview()) 1410cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 1411cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1412cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) handling_input_event_ = true; 1413cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) webview()->focusedFrame()->selectWordAroundCaret(); 1414cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) handling_input_event_ = false; 1415cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 1416cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 14175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderViewImpl::IsBackForwardToStaleEntry( 14185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const FrameMsg_Navigate_Params& params, 14195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_reload) { 14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure this isn't a back/forward to an entry we have already cropped 14215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // or replaced from our history, before the browser knew about it. If so, 14225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a new navigation has committed in the mean time, and we can ignore this. 142390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool is_back_forward = !is_reload && params.page_state.IsValid(); 14245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note: if the history_list_length_ is 0 for a back/forward, we must be 14265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // restoring from a previous session. We'll update our state in OnNavigate. 14275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!is_back_forward || history_list_length_ <= 0) 14285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 14295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_EQ(static_cast<int>(history_page_ids_.size()), history_list_length_); 14315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check for whether the forward history has been cropped due to a recent 14335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // navigation the browser didn't know about. 14345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (params.pending_history_list_offset >= history_list_length_) 14355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 14365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check for whether this entry has been replaced with a new one. 14385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_page_id = 14395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history_page_ids_[params.pending_history_list_offset]; 14405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (expected_page_id > 0 && params.page_id != expected_page_id) { 14415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (params.page_id < expected_page_id) 14425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 14435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Otherwise we've removed an earlier entry and should have shifted all 14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // entries left. For now, it's ok to lazily update the list. 14465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(creis): Notify all live renderers when we remove entries from 14475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the front of the list, so that we don't hit this case. 14485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history_page_ids_[params.pending_history_list_offset] = params.page_id; 14495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnCopyImageAt(int x, int y) { 14555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webview()->copyImageAt(WebPoint(x, y)); 14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1458010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void RenderViewImpl::OnSaveImageAt(int x, int y) { 1459010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) webview()->saveImageAt(WebPoint(x, y)); 1460010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 1461010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 14625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnUpdateTargetURLAck() { 14635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check if there is a targeturl waiting to be sent. 14641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (target_url_status_ == TARGET_PENDING) 14651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Send(new ViewHostMsg_UpdateTargetURL(routing_id_, pending_target_url_)); 14665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target_url_status_ = TARGET_NONE; 14685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1470c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void RenderViewImpl::OnExecuteEditCommand(const std::string& name, 1471c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& value) { 1472c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!webview() || !webview()->focusedFrame()) 14735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 14745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) webview()->focusedFrame()->executeCommand( 1476c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebString::fromUTF8(name), WebString::fromUTF8(value)); 14775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1479c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void RenderViewImpl::OnMoveCaret(const gfx::Point& point) { 14805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!webview()) 14815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 14825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1483c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Send(new ViewHostMsg_MoveCaret_ACK(routing_id_)); 1484c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1485f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) webview()->focusedFrame()->moveCaretSelection(point); 14865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1488c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void RenderViewImpl::OnScrollFocusedEditableNodeIntoRect( 1489c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const gfx::Rect& rect) { 1490a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (has_scrolled_focused_editable_node_into_rect_ && 1491a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) rect == rect_for_scrolled_focused_editable_node_) { 1492a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return; 1493a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 1494a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1495a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) blink::WebElement element = GetFocusedElement(); 1496a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!element.isNull() && IsEditableNode(element)) { 1497a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) rect_for_scrolled_focused_editable_node_ = rect; 1498a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) has_scrolled_focused_editable_node_into_rect_ = true; 1499a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) webview()->scrollFocusedNodeIntoRect(rect); 1500c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 1501c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 1502c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1503c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void RenderViewImpl::OnSetEditCommandsForNextKeyEvent( 1504c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const EditCommands& edit_commands) { 1505c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) edit_commands_ = edit_commands; 1506c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 1507c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 15085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnSetHistoryLengthAndPrune(int history_length, 15095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 minimum_page_id) { 15105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_GE(history_length, 0); 15115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(history_list_offset_ == history_list_length_ - 1); 15125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_GE(minimum_page_id, -1); 15135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Generate the new list. 15155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<int32> new_history_page_ids(history_length, -1); 15165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < history_page_ids_.size(); ++i) { 15175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (minimum_page_id >= 0 && history_page_ids_[i] < minimum_page_id) 15185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue; 15195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_history_page_ids.push_back(history_page_ids_[i]); 15205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_history_page_ids.swap(history_page_ids_); 15225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Update indexes. 15245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history_list_length_ = history_page_ids_.size(); 15255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history_list_offset_ = history_list_length_ - 1; 15265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnSetInitialFocus(bool reverse) { 15305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!webview()) 15315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 15325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webview()->setInitialFocus(reverse); 15335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 15365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnSetInLiveResize(bool in_live_resize) { 15375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!webview()) 15385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 15395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (in_live_resize) 15405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webview()->willStartLiveResize(); 15415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 15425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webview()->willEndLiveResize(); 15435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 15455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 15475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1548cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Sends the current history state to the browser so it will be saved before we 1549cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// navigate to a new page. 15505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::UpdateSessionHistory(WebFrame* frame) { 15515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If we have a valid page ID at this point, then it corresponds to the page 15525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // we are navigating away from. Otherwise, this is the first navigation, so 15535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // there is no past session history to record. 15545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (page_id_ == -1) 15555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1556cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SendUpdateState(history_controller_->GetCurrentEntry()); 15575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid RenderViewImpl::SendUpdateState(HistoryEntry* entry) { 15605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (!entry) 15615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 15625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't send state updates for kSwappedOutURL. 15645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (entry->root().urlString() == WebString::fromUTF8(kSwappedOutURL)) 15655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 15665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewHostMsg_UpdateState( 15685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu routing_id_, page_id_, HistoryEntryToPageState(entry))); 15695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderViewImpl::SendAndRunNestedMessageLoop(IPC::SyncMessage* message) { 15725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Before WebKit asks us to show an alert (etc.), it takes care of doing the 15735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // equivalent of WebView::willEnterModalLoop. In the case of showModalDialog 15745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it is particularly important that we do not call willEnterModalLoop as 15755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // that would defer resource loads for the dialog itself. 15765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (RenderThreadImpl::current()) // Will be NULL during unit tests. 15775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderThreadImpl::current()->DoNotNotifyWebKitOfModalLoop(); 15785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message->EnableMessagePumping(); // Runs a nested message loop. 15805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return Send(message); 15815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewImpl::GetWindowSnapshot(const WindowSnapshotCallback& callback) { 15842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int id = next_snapshot_id_++; 15852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pending_snapshots_.insert(std::make_pair(id, callback)); 15864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ui::LatencyInfo latency_info; 1587116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch latency_info.AddLatencyNumber(ui::WINDOW_OLD_SNAPSHOT_FRAME_NUMBER_COMPONENT, 1588116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 0, 1589116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch id); 1590116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<cc::SwapPromiseMonitor> latency_info_swap_promise_monitor; 1591116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (RenderWidgetCompositor* rwc = compositor()) { 1592116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch latency_info_swap_promise_monitor = 1593116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch rwc->CreateLatencyInfoSwapPromiseMonitor(&latency_info).Pass(); 1594116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 1595116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ScheduleCompositeWithForcedRedraw(); 1596116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 1597116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1598116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid RenderViewImpl::OnForceRedraw(int id) { 1599116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ui::LatencyInfo latency_info; 16005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (id) { 16015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) latency_info.AddLatencyNumber(ui::WINDOW_SNAPSHOT_FRAME_NUMBER_COMPONENT, 16025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 0, 16035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) id); 16045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1605a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) scoped_ptr<cc::SwapPromiseMonitor> latency_info_swap_promise_monitor; 16064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (RenderWidgetCompositor* rwc = compositor()) { 1607a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) latency_info_swap_promise_monitor = 1608a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) rwc->CreateLatencyInfoSwapPromiseMonitor(&latency_info).Pass(); 16094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 16104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ScheduleCompositeWithForcedRedraw(); 16112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 16122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewImpl::OnWindowSnapshotCompleted(const int snapshot_id, 16142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Size& size, const std::vector<unsigned char>& png) { 16154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 16164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Any pending snapshots with a lower ID than the one received are considered 16174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // to be implicitly complete, and returned the same snapshot data. 16184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) PendingSnapshotMap::iterator it = pending_snapshots_.begin(); 16194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) while(it != pending_snapshots_.end()) { 16204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (it->first <= snapshot_id) { 16214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) it->second.Run(size, png); 16224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) pending_snapshots_.erase(it++); 16234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } else { 16244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ++it; 16254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 16264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 16272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 16282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1629f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// blink::WebViewClient ------------------------------------------------------ 16305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1631c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochWebView* RenderViewImpl::createView(WebLocalFrame* creator, 1632c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const WebURLRequest& request, 1633c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const WebWindowFeatures& features, 1634c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const WebString& frame_name, 1635c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch WebNavigationPolicy policy, 1636c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bool suppress_opener) { 16375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ViewHostMsg_CreateWindow_Params params; 16385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.opener_id = routing_id_; 16392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.user_gesture = WebUserGestureIndicator::isProcessingUserGesture(); 1640bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch if (GetContentClient()->renderer()->AllowPopup()) 1641bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch params.user_gesture = true; 16425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.window_container_type = WindowFeaturesToContainerType(features); 16435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.session_storage_namespace_id = session_storage_namespace_id_; 16442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (frame_name != "_blank") 16452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.frame_name = frame_name; 1646effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch params.opener_render_frame_id = 1647a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RenderFrameImpl::FromWebFrame(creator)->GetRoutingID(); 16485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.opener_url = creator->document().url(); 164958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) params.opener_top_level_frame_url = creator->top()->document().url(); 1650e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch GURL security_url(creator->document().securityOrigin().toString()); 16512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!security_url.is_valid()) 16522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) security_url = GURL(); 16532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.opener_security_origin = security_url; 1654f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) params.opener_suppressed = suppress_opener; 16555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.disposition = NavigationPolicyToDisposition(policy); 1656a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch if (!request.isNull()) { 16575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.target_url = request.url(); 1658a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch params.referrer = GetReferrerFromRequest(creator, request); 1659a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch } 1660a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch params.features = features; 16615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1662f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (size_t i = 0; i < features.additionalFeatures.size(); ++i) 1663f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) params.additional_features.push_back(features.additionalFeatures[i]); 1664f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 16655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 routing_id = MSG_ROUTING_NONE; 1666868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int32 main_frame_routing_id = MSG_ROUTING_NONE; 16675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 surface_id = 0; 1668116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int64 cloned_session_storage_namespace_id = 0; 16695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderThread::Get()->Send( 16715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new ViewHostMsg_CreateWindow(params, 16725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &routing_id, 1673868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) &main_frame_routing_id, 16745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &surface_id, 16755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cloned_session_storage_namespace_id)); 16765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (routing_id == MSG_ROUTING_NONE) 16775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 16785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebUserGestureIndicator::consumeUserGesture(); 16802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16810529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // While this view may be a background extension page, it can spawn a visible 16820529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // render view. So we just assume that the new one is not another background 16830529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // page instead of passing on our own value. 16840529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // TODO(vangelis): Can we tell if the new view will be a background page? 16850529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch bool never_visible = false; 16862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1687e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba ViewMsg_Resize_Params initial_size = ViewMsg_Resize_Params(); 1688e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba initial_size.screen_info = screen_info_; 1689e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba 16908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // The initial hidden state for the RenderViewImpl here has to match what the 16918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // browser will eventually decide for the given disposition. Since we have to 16928bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // return from this call synchronously, we just have to make our best guess 16938bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // and rely on the browser sending a WasHidden / WasShown message if it 16948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // disagrees. 16955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewImpl* view = RenderViewImpl::Create( 16965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) routing_id_, 16970529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch true, // window_was_created_with_opener 16985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) renderer_preferences_, 16990529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch webkit_preferences_, 17005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) routing_id, 1701868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) main_frame_routing_id, 17025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) surface_id, 17035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cloned_session_storage_namespace_id, 1704a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16(), // WebCore will take care of setting the correct name. 1705a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) true, // is_renderer_created 1706a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) false, // swapped_out 1707cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) MSG_ROUTING_NONE, // proxy_routing_id 1708a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) params.disposition == NEW_BACKGROUND_TAB, // hidden 17090529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch never_visible, 17100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 1, // next_page_id 1711e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba initial_size, 1712e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba false, // enable_auto_resize 1713e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba gfx::Size(), // min_size 1714e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba gfx::Size() // max_size 1715e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba ); 17165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) view->opened_by_user_gesture_ = params.user_gesture; 17175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Record whether the creator frame is trying to suppress the opener field. 17195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) view->opener_suppressed_ = params.opener_suppressed; 17205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return view->webview(); 17225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1724f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)WebWidget* RenderViewImpl::createPopupMenu(blink::WebPopupType popup_type) { 17255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidget* widget = 17265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidget::Create(routing_id_, popup_type, screen_info_); 1727a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!widget) 1728a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return NULL; 17294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (screen_metrics_emulator_) { 17304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) widget->SetPopupOriginAdjustmentsForEmulation( 17314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) screen_metrics_emulator_.get()); 17324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 17335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return widget->webwidget(); 17345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1736eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochWebStorageNamespace* RenderViewImpl::createSessionStorageNamespace() { 1737bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch CHECK(session_storage_namespace_id_ != kInvalidSessionStorageNamespaceId); 17385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new WebStorageNamespaceImpl(session_storage_namespace_id_); 17395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1741c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid RenderViewImpl::printPage(WebLocalFrame* frame) { 17425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FOR_EACH_OBSERVER(RenderViewObserver, observers_, 17435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintPage(frame, handling_input_event_)); 17445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid RenderViewImpl::saveImageFromDataURL(const blink::WebString& data_url) { 17471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Note: We should basically send GURL but we use size-limited string instead 17481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // in order to send a larger data url to save a image for <canvas> or <img>. 17491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (data_url.length() < kMaxLengthOfDataURLString) 17501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Send(new ViewHostMsg_SaveImageFromDataURL(routing_id_, data_url.utf8())); 17511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 17521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 17535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderViewImpl::enumerateChosenDirectory( 17545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebString& path, 17555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebFileChooserCompletion* chooser_completion) { 17565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id = enumeration_completion_id_++; 17575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enumeration_completions_[id] = chooser_completion; 17585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return Send(new ViewHostMsg_EnumerateDirectory( 17595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) routing_id_, 17605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) id, 1761eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::FilePath::FromUTF16Unsafe(path))); 17625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1764effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid RenderViewImpl::FrameDidStartLoading(WebFrame* frame) { 1765effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK_GE(frames_in_progress_, 0); 1766effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (frames_in_progress_ == 0) 1767effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch FOR_EACH_OBSERVER(RenderViewObserver, observers_, DidStartLoading()); 1768effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch frames_in_progress_++; 17695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1771effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid RenderViewImpl::FrameDidStopLoading(WebFrame* frame) { 1772a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // TODO(japhet): This should be a DCHECK, but the pdf plugin sometimes 1773a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // calls DidStopLoading() without a matching DidStartLoading(). 1774a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch if (frames_in_progress_ == 0) 1775a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return; 1776effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch frames_in_progress_--; 1777effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (frames_in_progress_ == 0) { 1778effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DidStopLoadingIcons(); 1779effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch FOR_EACH_OBSERVER(RenderViewObserver, observers_, DidStopLoading()); 1780effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 17815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewImpl::didCancelCompositionOnSelectionChange() { 1784116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Send(new InputHostMsg_ImeCancelComposition(routing_id())); 17855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderViewImpl::handleCurrentKeyboardEvent() { 17885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (edit_commands_.empty()) 17895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 17905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebFrame* frame = webview()->focusedFrame(); 17925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!frame) 17935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 17945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EditCommands::iterator it = edit_commands_.begin(); 17965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EditCommands::iterator end = edit_commands_.end(); 17975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool did_execute_command = false; 17995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (; it != end; ++it) { 18005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // In gtk and cocoa, it's possible to bind multiple edit commands to one 18015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // key (but it's the exception). Once one edit command is not executed, it 18025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // seems safest to not execute the rest. 18035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!frame->executeCommand(WebString::fromUTF8(it->name), 1804868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebString::fromUTF8(it->value), 1805a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetFocusedElement())) 18065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 18075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) did_execute_command = true; 18085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return did_execute_command; 18115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderViewImpl::runFileChooser( 1814f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebFileChooserParams& params, 18155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebFileChooserCompletion* chooser_completion) { 18165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do not open the file dialog in a hidden RenderView. 18175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (is_hidden()) 18185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 18195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FileChooserParams ipc_params; 18205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (params.directory) 1821a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ipc_params.mode = FileChooserParams::UploadFolder; 18225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (params.multiSelect) 18235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ipc_params.mode = FileChooserParams::OpenMultiple; 18245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (params.saveAs) 18255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ipc_params.mode = FileChooserParams::Save; 18265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 18275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ipc_params.mode = FileChooserParams::Open; 18285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ipc_params.title = params.title; 18295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ipc_params.default_file_name = 1830eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::FilePath::FromUTF16Unsafe(params.initialValue); 18315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ipc_params.accept_types.reserve(params.acceptTypes.size()); 18325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < params.acceptTypes.size(); ++i) 18335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ipc_params.accept_types.push_back(params.acceptTypes[i]); 18345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 18357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ipc_params.capture = params.useMediaCapture; 18365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 18375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ScheduleFileChooser(ipc_params, chooser_completion); 18395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid RenderViewImpl::SetValidationMessageDirection( 18421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16* wrapped_main_text, 18431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci blink::WebTextDirection main_text_hint, 18441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16* wrapped_sub_text, 18451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci blink::WebTextDirection sub_text_hint) { 18461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (main_text_hint == blink::WebTextDirectionLeftToRight) { 18471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *wrapped_main_text = 18481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::i18n::GetDisplayStringInLTRDirectionality(*wrapped_main_text); 18491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } else if (main_text_hint == blink::WebTextDirectionRightToLeft && 18501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci !base::i18n::IsRTL()) { 18511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::i18n::WrapStringWithRTLFormatting(wrapped_main_text); 18521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 18531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 18541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!wrapped_sub_text->empty()) { 18551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (sub_text_hint == blink::WebTextDirectionLeftToRight) { 18561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *wrapped_sub_text = 18571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::i18n::GetDisplayStringInLTRDirectionality(*wrapped_sub_text); 18581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } else if (sub_text_hint == blink::WebTextDirectionRightToLeft) { 18591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::i18n::WrapStringWithRTLFormatting(wrapped_sub_text); 18601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 18611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 18621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 18631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 18645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void RenderViewImpl::showValidationMessage( 18655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const blink::WebRect& anchor_in_root_view, 18665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const blink::WebString& main_text, 18671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci blink::WebTextDirection main_text_hint, 18685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const blink::WebString& sub_text, 18691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci blink::WebTextDirection sub_text_hint) { 18705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 wrapped_main_text = main_text; 18715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 wrapped_sub_text = sub_text; 18721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 18731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetValidationMessageDirection( 18741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &wrapped_main_text, main_text_hint, &wrapped_sub_text, sub_text_hint); 18751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 18765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Send(new ViewHostMsg_ShowValidationMessage( 1877116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch routing_id(), AdjustValidationMessageAnchor(anchor_in_root_view), 1878116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch wrapped_main_text, wrapped_sub_text)); 18795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 18805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void RenderViewImpl::hideValidationMessage() { 18825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Send(new ViewHostMsg_HideValidationMessage(routing_id())); 18835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 18845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void RenderViewImpl::moveValidationMessage( 18865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const blink::WebRect& anchor_in_root_view) { 1887116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Send(new ViewHostMsg_MoveValidationMessage( 1888116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch routing_id(), AdjustValidationMessageAnchor(anchor_in_root_view))); 18895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 18905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::setStatusText(const WebString& text) { 18925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::UpdateTargetURL(const GURL& url, 18955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& fallback_url) { 18965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL latest_url = url.is_empty() ? fallback_url : url; 18975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (latest_url == target_url_) 18985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 18995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tell the browser to display a destination link. 19015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (target_url_status_ == TARGET_INFLIGHT || 19025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target_url_status_ == TARGET_PENDING) { 19035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If we have a request in-flight, save the URL to be sent when we 19045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // receive an ACK to the in-flight request. We can happily overwrite 19055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // any existing pending sends. 19065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_target_url_ = latest_url; 19075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target_url_status_ = TARGET_PENDING; 19085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 19095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // URLs larger than |MaxURLChars()| cannot be sent through IPC - 19105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // see |ParamTraits<GURL>|. 19115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (latest_url.possibly_invalid_spec().size() > GetMaxURLChars()) 19125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) latest_url = GURL(); 19131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Send(new ViewHostMsg_UpdateTargetURL(routing_id_, latest_url)); 19145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target_url_ = latest_url; 19155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target_url_status_ = TARGET_INFLIGHT; 19165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)gfx::RectF RenderViewImpl::ClientRectToPhysicalWindowRect( 19202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::RectF& rect) const { 19212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::RectF window_rect = rect; 19222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window_rect.Scale(device_scale_factor_ * webview()->pageScaleFactor()); 19232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return window_rect; 19242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 19252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::StartNavStateSyncTimerIfNecessary() { 19272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // No need to update state if no page has committed yet. 19282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (page_id_ == -1) 19292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 19302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int delay; 19325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (send_content_state_immediately_) 19335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delay = 0; 19345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (is_hidden()) 19355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delay = kDelaySecondsForContentStateSyncHidden; 19365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 19375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delay = kDelaySecondsForContentStateSync; 19385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (nav_state_sync_timer_.IsRunning()) { 19405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The timer is already running. If the delay of the timer maches the amount 19415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // we want to delay by, then return. Otherwise stop the timer so that it 19425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // gets started with the right delay. 19435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (nav_state_sync_timer_.GetCurrentDelay().InSeconds() == delay) 19445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 19455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nav_state_sync_timer_.Stop(); 19465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nav_state_sync_timer_.Start(FROM_HERE, TimeDelta::FromSeconds(delay), this, 19495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &RenderViewImpl::SyncNavigationState); 19505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::setMouseOverURL(const WebURL& url) { 19535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_over_url_ = GURL(url); 19545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateTargetURL(mouse_over_url_, focus_url_); 19555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::setKeyboardFocusURL(const WebURL& url) { 19585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) focus_url_ = GURL(url); 19595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateTargetURL(focus_url_, mouse_over_url_); 19605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1962c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid RenderViewImpl::startDragging(WebLocalFrame* frame, 19635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebDragData& data, 19645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebDragOperationsMask mask, 19655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebImage& image, 19665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebPoint& webImageOffset) { 1967eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DropData drop_data(DropDataBuilder::Build(data)); 19685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) drop_data.referrer_policy = frame->document().referrerPolicy(); 19695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Vector2d imageOffset(webImageOffset.x, webImageOffset.y); 19705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new DragHostMsg_StartDragging(routing_id_, 19715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) drop_data, 19725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mask, 19735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) image.getSkBitmap(), 19745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) imageOffset, 19755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) possible_drag_event_info_)); 19765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderViewImpl::acceptsLoadDrops() { 19795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return renderer_preferences_.can_accept_load_drops; 19805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::focusNext() { 19835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewHostMsg_TakeFocus(routing_id_, false)); 19845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::focusPrevious() { 19875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewHostMsg_TakeFocus(routing_id_, true)); 19885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::focusedNodeChanged(const WebNode& node) { 1991a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) has_scrolled_focused_editable_node_into_rect_ = false; 1992a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 19935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewHostMsg_FocusedNodeChanged(routing_id_, IsEditableNode(node))); 19945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FOR_EACH_OBSERVER(RenderViewObserver, observers_, FocusedNodeChanged(node)); 1996116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1997116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // TODO(dmazzoni): this should be part of RenderFrameObserver. 19981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetMainRenderFrame()->FocusedNodeChanged(node); 19995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::didUpdateLayout() { 2002d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) FOR_EACH_OBSERVER(RenderViewObserver, observers_, DidUpdateLayout()); 2003d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 20045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We don't always want to set up a timer, only if we've been put in that 20055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // mode by getting a |ViewMsg_EnablePreferredSizeChangedMode| 20065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // message. 20075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!send_preferred_size_changes_ || !webview()) 20085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 20095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (check_preferred_size_timer_.IsRunning()) 20115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 20125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) check_preferred_size_timer_.Start(FROM_HERE, 20135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TimeDelta::FromMilliseconds(0), this, 20145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &RenderViewImpl::CheckPreferredSize); 20155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::navigateBackForwardSoon(int offset) { 20185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewHostMsg_GoToEntryAtOffset(routing_id_, offset)); 20195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int RenderViewImpl::historyBackListCount() { 20225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return history_list_offset_ < 0 ? 0 : history_list_offset_; 20235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int RenderViewImpl::historyForwardListCount() { 20265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return history_list_length_ - historyBackListCount() - 1; 20275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2029f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// blink::WebWidgetClient ---------------------------------------------------- 20305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::didFocus() { 20325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(jcivelli): when https://bugs.webkit.org/show_bug.cgi?id=33389 is fixed 20335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // we won't have to test for user gesture anymore and we can 20345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // move that code back to render_widget.cc 20352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (WebUserGestureIndicator::isProcessingUserGesture() && 2036868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) !RenderThreadImpl::current()->layout_test_mode()) { 20375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewHostMsg_Focus(routing_id_)); 20385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::didBlur() { 20425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(jcivelli): see TODO above in didFocus(). 20432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (WebUserGestureIndicator::isProcessingUserGesture() && 2044868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) !RenderThreadImpl::current()->layout_test_mode()) { 20455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewHostMsg_Blur(routing_id_)); 20465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// We are supposed to get a single call to Show for a newly created RenderView 20505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// that was created via RenderViewImpl::CreateWebView. So, we wait until this 20515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// point to dispatch the ShowView message. 20525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 20535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This method provides us with the information about how to display the newly 20545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// created RenderView (i.e., as a blocked popup or as a new tab). 20555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 20565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::show(WebNavigationPolicy policy) { 20575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (did_show_) { 20585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When supports_multiple_windows is disabled, popups are reusing 20595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the same view. In some scenarios, this makes WebKit to call show() twice. 206090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (webkit_preferences_.supports_multiple_windows) 206190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) NOTREACHED() << "received extraneous Show call"; 20625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 20635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) did_show_ = true; 20655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(opener_id_ != MSG_ROUTING_NONE); 20675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NOTE: initial_pos_ may still have its default values at this point, but 20695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // that's okay. It'll be ignored if disposition is not NEW_POPUP, or the 20705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // browser process will impose a default position otherwise. 20715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewHostMsg_ShowView(opener_id_, routing_id_, 20725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigationPolicyToDisposition(policy), initial_pos_, 20735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) opened_by_user_gesture_)); 20745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetPendingWindowRect(initial_pos_); 20755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::runModal() { 20785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(did_show_) << "should already have shown the view"; 20795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2080f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Don't allow further dialogs if we are waiting to swap out, since the 2081f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // PageGroupLoadDeferrer in our stack prevents it. 2082f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (suppress_dialogs_until_swap_out_) 2083f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return; 2084f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 20855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We must keep WebKit's shared timer running in this case in order to allow 20865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // showModalDialog to function properly. 20875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 20885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(darin): WebKit should really be smarter about suppressing events and 20895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // timers so that we do not need to manage the shared timer in such a heavy 20905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // handed manner. 20915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 20925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (RenderThreadImpl::current()) // Will be NULL during unit tests. 20935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderThreadImpl::current()->DoNotSuspendWebKitSharedTimer(); 20945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SendAndRunNestedMessageLoop(new ViewHostMsg_RunModal( 20965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) routing_id_, opener_id_)); 20975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderViewImpl::enterFullScreen() { 21005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewHostMsg_ToggleFullscreen(routing_id_, true)); 21015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 21025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::exitFullScreen() { 21055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewHostMsg_ToggleFullscreen(routing_id_, false)); 21065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderViewImpl::requestPointerLock() { 21095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mouse_lock_dispatcher_->LockMouse(webwidget_mouse_lock_target_.get()); 21105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::requestPointerUnlock() { 21135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_lock_dispatcher_->UnlockMouse(webwidget_mouse_lock_target_.get()); 21145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderViewImpl::isPointerLocked() { 21175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mouse_lock_dispatcher_->IsMouseLockedTo( 21185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webwidget_mouse_lock_target_.get()); 21195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewImpl::didHandleGestureEvent( 21222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WebGestureEvent& event, 21232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool event_cancelled) { 21242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderWidget::didHandleGestureEvent(event, event_cancelled); 2125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 21265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!event_cancelled) { 21275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FOR_EACH_OBSERVER( 21285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) RenderViewObserver, observers_, DidHandleGestureEvent(event)); 21295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 21305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (event.type != blink::WebGestureEvent::GestureTap) 2132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return; 2133f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 21345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // TODO(estade): hit test the event against focused node to make sure 21355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // the tap actually hit the focused node. 2136f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebTextInputType text_input_type = 2137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GetWebView()->textInputInfo().type; 2138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Send(new ViewHostMsg_FocusedNodeTouched( 2140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) routing_id(), text_input_type != blink::WebTextInputTypeNone)); 21415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2143a3f7b4e666c476898878fa745f637129375cd889Ben Murdochvoid RenderViewImpl::initializeLayerTreeView() { 2144a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch RenderWidget::initializeLayerTreeView(); 2145a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch RenderWidgetCompositor* rwc = compositor(); 2146cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!rwc) 2147a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch return; 2148cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (webview() && webview()->devToolsAgent()) 2149cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) webview()->devToolsAgent()->setLayerTreeId(rwc->GetLayerTreeId()); 2150cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2151cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if !defined(OS_MACOSX) // many events are unhandled - http://crbug.com/138003 2152cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) RenderThreadImpl* render_thread = RenderThreadImpl::current(); 2153cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // render_thread may be NULL in tests. 2154cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) InputHandlerManager* input_handler_manager = 2155cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) render_thread ? render_thread->input_handler_manager() : NULL; 2156cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (input_handler_manager) { 2157cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) input_handler_manager->AddInputHandler( 2158cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) routing_id_, rwc->GetInputHandler(), AsWeakPtr()); 2159cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 2160cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif 2161a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch} 2162a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 2163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// blink::WebFrameClient ----------------------------------------------------- 21645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::Repaint(const gfx::Size& size) { 21662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnRepaint(size); 21675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::SetEditCommandForNextKeyEvent(const std::string& name, 21705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& value) { 21715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EditCommands edit_commands; 21725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) edit_commands.push_back(EditCommand(name, value)); 21735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnSetEditCommandsForNextKeyEvent(edit_commands); 21745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::ClearEditCommands() { 21775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) edit_commands_.clear(); 21785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2180f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)SSLStatus RenderViewImpl::GetSSLStatusOfFrame(blink::WebFrame* frame) const { 2181a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch std::string security_info; 2182a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch if (frame && frame->dataSource()) 2183a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch security_info = frame->dataSource()->response().securityInfo(); 2184a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 2185a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch SSLStatus ssl_status; 2186a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch DeserializeSecurityInfo(security_info, 2187a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch &ssl_status.cert_id, 2188a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch &ssl_status.cert_status, 2189a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch &ssl_status.security_bits, 2190a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) &ssl_status.connection_status, 2191a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) &ssl_status.signed_certificate_timestamp_ids); 2192a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch return ssl_status; 21932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 21942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 21954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)const std::string& RenderViewImpl::GetAcceptLanguages() const { 21964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return renderer_preferences_.accept_languages; 21974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 21984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2199c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid RenderViewImpl::didCreateDataSource(WebLocalFrame* frame, 2200c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch WebDataSource* ds) { 22015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool content_initiated = !pending_navigation_params_.get(); 22025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Make sure any previous redirect URLs end up in our new data source. 22041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (pending_navigation_params_.get()) { 22051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (std::vector<GURL>::const_iterator i = 22061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) pending_navigation_params_->redirects.begin(); 22071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) i != pending_navigation_params_->redirects.end(); ++i) { 22081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ds->appendRedirect(*i); 22091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 22101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 22111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 22125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DocumentState* document_state = DocumentState::FromDataSource(ds); 22135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!document_state) { 22145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document_state = new DocumentState; 22155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ds->setExtraData(document_state); 22165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!content_initiated) 22175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PopulateDocumentStateFromPending(document_state); 22185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Carry over the user agent override flag, if it exists. 22215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (content_initiated && webview() && webview()->mainFrame() && 22225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) webview()->mainFrame()->isWebLocalFrame() && 22235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webview()->mainFrame()->dataSource()) { 22245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DocumentState* old_document_state = 22255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DocumentState::FromDataSource(webview()->mainFrame()->dataSource()); 22265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (old_document_state) { 2227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) InternalDocumentStateData* internal_data = 2228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) InternalDocumentStateData::FromDocumentState(document_state); 2229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) InternalDocumentStateData* old_internal_data = 2230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) InternalDocumentStateData::FromDocumentState(old_document_state); 2231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) internal_data->set_is_overriding_user_agent( 2232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) old_internal_data->is_overriding_user_agent()); 22335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The rest of RenderView assumes that a WebDataSource will always have a 22375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // non-null NavigationState. 22385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (content_initiated) { 22395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document_state->set_navigation_state( 22405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigationState::CreateContentInitiated()); 22415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 22425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document_state->set_navigation_state(CreateNavigationStateFromPending()); 22435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_navigation_params_.reset(); 22445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // DocumentState::referred_by_prefetcher_ is true if we are 22475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // navigating from a page that used prefetching using a link on that 22485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // page. We are early enough in the request process here that we 22495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // can still see the DocumentState of the previous page and set 22505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this value appropriately. 22515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(gavinp): catch the important case of navigation in a new 22525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // renderer process. 22535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (webview()) { 22545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (WebFrame* old_frame = webview()->mainFrame()) { 22555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebURLRequest& original_request = ds->originalRequest(); 22565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL referrer( 22575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) original_request.httpHeaderField(WebString::fromUTF8("Referer"))); 22585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!referrer.is_empty() && old_frame->isWebLocalFrame() && 22595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DocumentState::FromDataSource(old_frame->dataSource()) 22605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ->was_prefetcher()) { 22615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (; old_frame; old_frame = old_frame->traverseNext(false)) { 22625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebDataSource* old_frame_ds = old_frame->dataSource(); 22635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (old_frame_ds && referrer == GURL(old_frame_ds->request().url())) { 22645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document_state->set_was_referred_by_prefetcher(true); 22655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 22665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (content_initiated) { 22735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebURLRequest& request = ds->request(); 22745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (request.cachePolicy()) { 22755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case WebURLRequest::UseProtocolCachePolicy: // normal load. 22765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document_state->set_load_type(DocumentState::LINK_LOAD_NORMAL); 22775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 22785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case WebURLRequest::ReloadIgnoringCacheData: // reload. 227946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) case WebURLRequest::ReloadBypassingCache: // end-to-end reload. 22805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document_state->set_load_type(DocumentState::LINK_LOAD_RELOAD); 22815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 22825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case WebURLRequest::ReturnCacheDataElseLoad: // allow stale data. 22835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document_state->set_load_type( 22845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DocumentState::LINK_LOAD_CACHE_STALE_OK); 22855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 22865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case WebURLRequest::ReturnCacheDataDontLoad: // Don't re-post. 22875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document_state->set_load_type(DocumentState::LINK_LOAD_CACHE_ONLY); 22885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 228946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) default: 229046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) NOTREACHED(); 22915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FOR_EACH_OBSERVER( 22955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewObserver, observers_, DidCreateDataSource(frame, ds)); 22965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::PopulateDocumentStateFromPending( 22995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DocumentState* document_state) { 23005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const FrameMsg_Navigate_Params& params = *pending_navigation_params_.get(); 23015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document_state->set_request_time(params.request_time); 23025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2303c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) InternalDocumentStateData* internal_data = 2304c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) InternalDocumentStateData::FromDocumentState(document_state); 2305c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2306cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!params.url.SchemeIs(url::kJavaScriptScheme) && 23075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) params.navigation_type == FrameMsg_Navigate_Type::RESTORE) { 23085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We're doing a load of a page that was restored from the last session. By 23095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // default this prefers the cache over loading (LOAD_PREFERRING_CACHE) which 23105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // can result in stale data for pages that are set to expire. We explicitly 23115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // override that by setting the policy here so that as necessary we load 23125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // from the network. 23135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // 23145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // TODO(davidben): Remove this in favor of passing a cache policy to the 23155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // loadHistoryItem call in OnNavigate. That requires not overloading 23165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // UseProtocolCachePolicy to mean both "normal load" and "determine cache 23175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // policy based on load type, etc". 2318c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) internal_data->set_cache_policy_override( 23195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebURLRequest::UseProtocolCachePolicy); 23205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (IsReload(params)) 23235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document_state->set_load_type(DocumentState::RELOAD); 232490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) else if (params.page_state.IsValid()) 23255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document_state->set_load_type(DocumentState::HISTORY_LOAD); 23265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 23275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document_state->set_load_type(DocumentState::NORMAL_LOAD); 23285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2329c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) internal_data->set_is_overriding_user_agent(params.is_overriding_user_agent); 2330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) internal_data->set_must_reset_scroll_and_scale_state( 23315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.navigation_type == 23325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) FrameMsg_Navigate_Type::RELOAD_ORIGINAL_REQUEST_URL); 23335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document_state->set_can_load_local_resources(params.can_load_local_resources); 23345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 23355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NavigationState* RenderViewImpl::CreateNavigationStateFromPending() { 23375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const FrameMsg_Navigate_Params& params = *pending_navigation_params_.get(); 23385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigationState* navigation_state = NULL; 23395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A navigation resulting from loading a javascript URL should not be treated 23415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // as a browser initiated event. Instead, we want it to look as if the page 23425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // initiated any load resulting from JS execution. 2343cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!params.url.SchemeIs(url::kJavaScriptScheme)) { 23445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) navigation_state = NavigationState::CreateBrowserInitiated( 23455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.page_id, 23465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.pending_history_list_offset, 2347c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) params.should_clear_history_list, 23485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.transition); 2349f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) navigation_state->set_should_replace_current_entry( 2350f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) params.should_replace_current_entry); 23515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) navigation_state->set_transferred_request_child_id( 23525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.transferred_request_child_id); 23535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) navigation_state->set_transferred_request_request_id( 23545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.transferred_request_request_id); 23555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) navigation_state->set_allow_download(params.allow_download); 23562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) navigation_state->set_extra_headers(params.extra_headers); 23575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 23585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) navigation_state = NavigationState::CreateContentInitiated(); 23595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return navigation_state; 23615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 23625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::ProcessViewLayoutFlags(const CommandLine& command_line) { 23645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool enable_viewport = 2365f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) command_line.HasSwitch(switches::kEnableViewport) || 2366f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) command_line.HasSwitch(switches::kEnableViewportMeta); 23675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If viewport tag is enabled, then the WebKit side will take care 23692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // of setting the fixed layout size and page scale limits. 23702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (enable_viewport) 23712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 23722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2373c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // When navigating to a new page, reset the page scale factor to be 1.0. 2374c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch webview()->setInitialPageScaleOverride(1.f); 2375c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 2376c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) float maxPageScaleFactor = 2377c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) command_line.HasSwitch(switches::kEnablePinch) ? 4.f : 1.f ; 2378c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) webview()->setPageScaleFactorLimits(1, maxPageScaleFactor); 23795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 23805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2381cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void RenderViewImpl::didClearWindowObject(WebLocalFrame* frame) { 2382cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) FOR_EACH_OBSERVER( 2383cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) RenderViewObserver, observers_, DidClearWindowObject(frame)); 23845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 23855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (enabled_bindings_& BINDINGS_POLICY_WEB_UI) 23865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WebUIExtension::Install(frame); 23875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 23885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (enabled_bindings_ & BINDINGS_POLICY_STATS_COLLECTION) 23895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) StatsCollectionController::Install(frame); 23905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 23915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const CommandLine& command_line = *CommandLine::ForCurrentProcess(); 23925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 23935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (command_line.HasSwitch(switches::kEnableSkiaBenchmarking)) 23945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SkiaBenchmarking::Install(frame); 2395868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 23965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (command_line.HasSwitch(switches::kEnableMemoryBenchmarking)) 23975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MemoryBenchmarkingExtension::Install(frame); 23985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 23995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2400c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid RenderViewImpl::didChangeIcon(WebLocalFrame* frame, 2401c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebIconURL::Type icon_type) { 2402c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (frame->parent()) 2403c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 2404c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2405c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!TouchEnabled() && icon_type != WebIconURL::TypeFavicon) 2406c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 2407c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2408c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebVector<WebIconURL> icon_urls = frame->iconURLs(icon_type); 2409c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<FaviconURL> urls; 2410c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (size_t i = 0; i < icon_urls.size(); i++) { 24110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch std::vector<gfx::Size> sizes; 241223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ConvertToFaviconSizes(icon_urls[i].sizes(), &sizes); 241323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) urls.push_back(FaviconURL( 241423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) icon_urls[i].iconURL(), ToFaviconType(icon_urls[i].iconType()), sizes)); 2415c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 2416c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SendUpdateFaviconURL(urls); 24175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 24185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2419c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid RenderViewImpl::didUpdateCurrentHistoryItem(WebLocalFrame* frame) { 24205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartNavStateSyncTimerIfNecessary(); 24215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 24225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::CheckPreferredSize() { 24245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We don't always want to send the change messages over IPC, only if we've 24255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // been put in that mode by getting a |ViewMsg_EnablePreferredSizeChangedMode| 24265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // message. 24275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!send_preferred_size_changes_ || !webview()) 24285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 24295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2430868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) gfx::Size size = webview()->contentsPreferredMinimumSize(); 24315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 243258e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch // In the presence of zoom, these sizes are still reported as if unzoomed, 243358e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch // so we need to adjust. 243458e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch double zoom_factor = ZoomLevelToZoomFactor(webview()->zoomLevel()); 243558e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch size.set_width(static_cast<int>(size.width() * zoom_factor)); 243658e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch size.set_height(static_cast<int>(size.height() * zoom_factor)); 243758e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 24385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (size == preferred_size_) 24395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 24405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) preferred_size_ = size; 24425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewHostMsg_DidContentsPreferredSizeChange(routing_id_, 24435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) preferred_size_)); 24445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 24455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2446c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)BrowserPluginManager* RenderViewImpl::GetBrowserPluginManager() { 2447868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (!browser_plugin_manager_.get()) 24482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser_plugin_manager_ = BrowserPluginManager::Create(this); 2449868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return browser_plugin_manager_.get(); 24502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 24512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2452c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid RenderViewImpl::didChangeScrollOffset(WebLocalFrame* frame) { 24535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartNavStateSyncTimerIfNecessary(); 24545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FOR_EACH_OBSERVER( 24565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewObserver, observers_, DidChangeScrollOffset(frame)); 24572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 24585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::SendFindReply(int request_id, 24605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int match_count, 24615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int ordinal, 24625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebRect& selection_rect, 24635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool final_status_update) { 24645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewHostMsg_Find_Reply(routing_id_, 24655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id, 24665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) match_count, 24675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selection_rect, 24685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ordinal, 24695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final_status_update)); 24705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 24715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2472f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebString RenderViewImpl::acceptLanguages() { 24737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return WebString::fromUTF8(renderer_preferences_.accept_languages); 24747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 24757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2476f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// blink::WebPageSerializerClient implementation ------------------------------ 24775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::didSerializeDataForFrame( 24795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebURL& frame_url, 24805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebCString& data, 24815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebPageSerializerClient::PageSerializationStatus status) { 24825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewHostMsg_SendSerializedHtmlData( 24835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) routing_id(), 24845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) frame_url, 24855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data.data(), 24865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<int32>(status))); 24875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 24885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// RenderView implementation --------------------------------------------------- 24905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderViewImpl::Send(IPC::Message* message) { 24925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return RenderWidget::Send(message); 24935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 24945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciRenderFrameImpl* RenderViewImpl::GetMainRenderFrame() { 2496a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return main_render_frame_.get(); 2497a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 2498a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 24995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int RenderViewImpl::GetRoutingID() const { 25005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return routing_id_; 25015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::Size RenderViewImpl::GetSize() const { 25045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return size(); 25055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebPreferences& RenderViewImpl::GetWebkitPreferences() { 25085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return webkit_preferences_; 25095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewImpl::SetWebkitPreferences(const WebPreferences& preferences) { 25122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnUpdateWebPreferences(preferences); 25132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 25142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2515f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebView* RenderViewImpl::GetWebView() { 25165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return webview(); 25175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2519a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)blink::WebElement RenderViewImpl::GetFocusedElement() const { 25205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!webview()) 2521a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return WebElement(); 25225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebFrame* focused_frame = webview()->focusedFrame(); 25235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (focused_frame) { 25245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebDocument doc = focused_frame->document(); 25255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!doc.isNull()) 2526a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return doc.focusedElement(); 25275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2529a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return WebElement(); 25305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderViewImpl::IsEditableNode(const WebNode& node) const { 25335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node.isNull()) 25345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 25355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node.isContentEditable()) 25375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 25385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node.isElementNode()) { 25405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebElement& element = node.toConst<WebElement>(); 25415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (element.isTextFormControlElement()) 25425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 25435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Also return true if it has an ARIA role of 'textbox'. 25455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (unsigned i = 0; i < element.attributeCount(); ++i) { 25465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (LowerCaseEqualsASCII(element.attributeLocalName(i), "role")) { 25475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (LowerCaseEqualsASCII(element.attributeValue(i), "textbox")) 25485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 25495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 25505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 25555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool RenderViewImpl::NodeContainsPoint(const WebNode& node, 25585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const gfx::Point& point) const { 25595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) blink::WebHitTestResult hit_test = 25605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) webview()->hitTestResultAt(WebPoint(point.x(), point.y())); 25615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return node.containsIncludingShadowDOM(hit_test.node()); 25625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 25635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 25645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderViewImpl::ShouldDisplayScrollbars(int width, int height) const { 25655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (!send_preferred_size_changes_ || 25665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (disable_scrollbars_size_limit_.width() <= width || 25675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) disable_scrollbars_size_limit_.height() <= height)); 25685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int RenderViewImpl::GetEnabledBindings() const { 25715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return enabled_bindings_; 25725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderViewImpl::GetContentStateImmediately() const { 25755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return send_content_state_immediately_; 25765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2578f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebPageVisibilityState RenderViewImpl::GetVisibilityState() const { 25795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return visibilityState(); 25805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2582ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochvoid RenderViewImpl::DidStartLoading() { 2583a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) main_render_frame_->didStartLoading(true); 25845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2586ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochvoid RenderViewImpl::DidStopLoading() { 2587a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) main_render_frame_->didStopLoading(); 25885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::SyncNavigationState() { 25915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!webview()) 25925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 25935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SendUpdateState(history_controller_->GetCurrentEntry()); 25945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 259623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)blink::WebPlugin* RenderViewImpl::GetWebPluginForFind() { 259723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (!webview()) 259823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return NULL; 259923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 260023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) WebFrame* main_frame = webview()->mainFrame(); 26015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (main_frame->isWebLocalFrame() && 26025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) main_frame->document().isPluginDocument()) 260323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return webview()->mainFrame()->document().to<WebPluginDocument>().plugin(); 260423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 260523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#if defined(ENABLE_PLUGINS) 260623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (plugin_find_handler_) 260723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return plugin_find_handler_->container()->plugin(); 260823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#endif 260923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 261023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return NULL; 26115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 26125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnFind(int request_id, 2614a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& search_text, 26155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebFindOptions& options) { 26165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebFrame* main_frame = webview()->mainFrame(); 261723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) blink::WebPlugin* plugin = GetWebPluginForFind(); 26185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check if the plugin still exists in the document. 261923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (plugin) { 26205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (options.findNext) { 26215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Just navigate back/forward. 262223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) plugin->selectFindResult(options.forward); 26235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 262423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (!plugin->startFind( 26255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) search_text, options.matchCase, request_id)) { 26265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Send "no results". 26275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SendFindReply(request_id, 0, 0, gfx::Rect(), true); 26285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 26315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebFrame* frame_after_main = main_frame->traverseNext(true); 26345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebFrame* focused_frame = webview()->focusedFrame(); 26355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebFrame* search_frame = focused_frame; // start searching focused frame. 26365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool multi_frame = (frame_after_main != main_frame); 26385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If we have multiple frames, we don't want to wrap the search within the 26405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // frame, so we check here if we only have main_frame in the chain. 26415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool wrap_within_frame = !multi_frame; 26425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebRect selection_rect; 26445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool result = false; 26455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If something is selected when we start searching it means we cannot just 26475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // increment the current match ordinal; we need to re-generate it. 26485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebRange current_selection = focused_frame->selectionRange(); 26495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) do { 26515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result = search_frame->find( 26525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id, search_text, options, wrap_within_frame, &selection_rect); 26535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!result) { 26555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // don't leave text selected as you move to the next frame. 2656c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) search_frame->executeCommand(WebString::fromUTF8("Unselect"), 2657a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetFocusedElement()); 26585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Find the next frame, but skip the invisible ones. 26605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) do { 26615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // What is the next frame to search? (we might be going backwards). Note 26625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // that we specify wrap=true so that search_frame never becomes NULL. 26635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) search_frame = options.forward ? 26645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) search_frame->traverseNext(true) : 26655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) search_frame->traversePrevious(true); 26665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } while (!search_frame->hasVisibleContent() && 26675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) search_frame != focused_frame); 26685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure selection doesn't affect the search operation in new frame. 2670c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) search_frame->executeCommand(WebString::fromUTF8("Unselect"), 2671a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetFocusedElement()); 26725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If we have multiple frames and we have wrapped back around to the 26745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // focused frame, we need to search it once more allowing wrap within 26755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the frame, otherwise it will report 'no match' if the focused frame has 26765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // reported matches, but no frames after the focused_frame contain a 26775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // match for the search word(s). 26785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (multi_frame && search_frame == focused_frame) { 26795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result = search_frame->find( 26805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id, search_text, options, true, // Force wrapping. 26815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &selection_rect); 26825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webview()->setFocusedFrame(search_frame); 26865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } while (!result && search_frame != focused_frame); 26875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (options.findNext && current_selection.isNull()) { 26895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Force the main_frame to report the actual count. 26905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_frame->increaseMatchCount(0, request_id); 26915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 26925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If nothing is found, set result to "0 of 0", otherwise, set it to 26935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // "-1 of 1" to indicate that we found at least one item, but we don't know 26945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // yet what is active. 26955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int ordinal = result ? -1 : 0; // -1 here means, we might know more later. 26965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int match_count = result ? 1 : 0; // 1 here means possibly more coming. 26975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If we find no matches then this will be our last status update. 26995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Otherwise the scoping effort will send more results. 27005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool final_status_update = !result; 27015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SendFindReply(request_id, match_count, ordinal, selection_rect, 27035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final_status_update); 27045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Scoping effort begins, starting with the mainframe. 27065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) search_frame = main_frame; 27075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_frame->resetMatchCount(); 27095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) do { 27115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Cancel all old scoping requests before starting a new one. 27125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) search_frame->cancelPendingScopingEffort(); 27135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We don't start another scoping effort unless at least one match has 27155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // been found. 27165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (result) { 27175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start new scoping request. If the scoping function determines that it 27185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // needs to scope, it will defer until later. 27195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) search_frame->scopeStringMatches(request_id, 27205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) search_text, 27215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options, 27225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true); // reset the tickmarks 27235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Iterate to the next frame. The frame will not necessarily scope, for 27265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // example if it is not visible. 27275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) search_frame = search_frame->traverseNext(true); 27285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } while (search_frame != main_frame); 27295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 27315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnStopFinding(StopFindAction action) { 27335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebView* view = webview(); 27345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!view) 27355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 27365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 273723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) blink::WebPlugin* plugin = GetWebPluginForFind(); 273823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (plugin) { 273923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) plugin->stopFind(); 27405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 27415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool clear_selection = action == STOP_FIND_ACTION_CLEAR_SELECTION; 2744c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (clear_selection) { 2745c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) view->focusedFrame()->executeCommand(WebString::fromUTF8("Unselect"), 2746a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetFocusedElement()); 2747c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 27485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebFrame* frame = view->mainFrame(); 27505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (frame) { 27515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) frame->stopFinding(clear_selection); 27525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) frame = frame->traverseNext(false); 27535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (action == STOP_FIND_ACTION_ACTIVATE_SELECTION) { 27565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebFrame* focused_frame = view->focusedFrame(); 27575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (focused_frame) { 27585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebDocument doc = focused_frame->document(); 27595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!doc.isNull()) { 2760a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) WebElement element = doc.focusedElement(); 2761a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!element.isNull()) 2762a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) element.simulateClick(); 27635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 27675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 27695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnActivateNearestFindResult(int request_id, 27705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) float x, float y) { 27715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!webview()) 27725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 27735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebFrame* main_frame = webview()->mainFrame(); 27755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebRect selection_rect; 27765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int ordinal = main_frame->selectNearestFindMatch(WebFloatPoint(x, y), 27775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &selection_rect); 27785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ordinal == -1) { 27795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Something went wrong, so send a no-op reply (force the main_frame to 27805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // report the current match count) in case the host is waiting for a 27815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // response due to rate-limiting). 27825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_frame->increaseMatchCount(0, request_id); 27835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 27845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SendFindReply(request_id, 27875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) -1 /* number_of_matches */, 27885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ordinal, 27895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selection_rect, 27905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true /* final_update */); 27915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 27925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnFindMatchRects(int current_version) { 27945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!webview()) 27955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 27965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebFrame* main_frame = webview()->mainFrame(); 27985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<gfx::RectF> match_rects; 27995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int rects_version = main_frame->findMatchMarkersVersion(); 28015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (current_version != rects_version) { 28025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebVector<WebFloatRect> web_match_rects; 28035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_frame->findMatchRects(web_match_rects); 28045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) match_rects.reserve(web_match_rects.size()); 28055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < web_match_rects.size(); ++i) 28065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) match_rects.push_back(gfx::RectF(web_match_rects[i])); 28075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 28085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::RectF active_rect = main_frame->activeFindMatchRect(); 28105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewHostMsg_FindMatchRects_Reply(routing_id_, 28115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rects_version, 28125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) match_rects, 28135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) active_rect)); 28145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 28155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 28165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnZoom(PageZoom zoom) { 28185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!webview()) // Not sure if this can happen, but no harm in being safe. 28195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 28205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webview()->hidePopups(); 28225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) double old_zoom_level = webview()->zoomLevel(); 28245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) double zoom_level; 28255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (zoom == PAGE_ZOOM_RESET) { 28265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) zoom_level = 0; 28275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (static_cast<int>(old_zoom_level) == old_zoom_level) { 28285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Previous zoom level is a whole number, so just increment/decrement. 28295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) zoom_level = old_zoom_level + zoom; 28305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 28315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Either the user hit the zoom factor limit and thus the zoom level is now 28325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // not a whole number, or a plugin changed it to a custom value. We want 28335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to go to the next whole number so that the user can always get back to 28345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 100% with the keyboard/menu. 28355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((old_zoom_level > 1 && zoom > 0) || 28365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (old_zoom_level < 1 && zoom < 0)) { 28375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) zoom_level = static_cast<int>(old_zoom_level + zoom); 28385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 28395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We're going towards 100%, so first go to the next whole number. 28405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) zoom_level = static_cast<int>(old_zoom_level); 28415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 28425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2843d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) webview()->setZoomLevel(zoom_level); 28445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) zoomLevelChanged(); 28455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 28465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnSetZoomLevelForLoadingURL(const GURL& url, 28485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) double zoom_level) { 28492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if !defined(OS_ANDROID) 28502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // On Android, page zoom isn't used, and in case of WebView, text zoom is used 28512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // for legacy WebView text scaling emulation. Thus, the code that resets 28522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the zoom level from this map will be effectively resetting text zoom level. 28535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_zoom_levels_[url] = zoom_level; 28542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 28555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 28565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2857f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void RenderViewImpl::OnSetZoomLevelForView(bool uses_temporary_zoom_level, 2858f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) double level) { 2859f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) uses_temporary_zoom_level_ = uses_temporary_zoom_level; 2860f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 2861f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) webview()->hidePopups(); 2862f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) webview()->setZoomLevel(level); 2863f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 2864f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 28655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnSetPageEncoding(const std::string& encoding_name) { 28665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webview()->setPageEncoding(WebString::fromUTF8(encoding_name)); 28675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 28685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnResetPageEncodingToDefault() { 28705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebString no_encoding; 28715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webview()->setPageEncoding(no_encoding); 28725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 28735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnPostMessageEvent( 28755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ViewMsg_PostMessage_Params& params) { 2876c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // TODO(nasko): Support sending to subframes. 28775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebFrame* frame = webview()->mainFrame(); 28785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Find the source frame if it exists. 28805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebFrame* source_frame = NULL; 28815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (params.source_routing_id != MSG_ROUTING_NONE) { 28825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewImpl* source_view = FromRoutingID(params.source_routing_id); 28835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (source_view) 28845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) source_frame = source_view->webview()->mainFrame(); 28855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 28865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28878bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // If the message contained MessagePorts, create the corresponding endpoints. 28888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) DCHECK_EQ(params.message_port_ids.size(), params.new_routing_ids.size()); 2889f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMessagePortChannelArray channels(params.message_port_ids.size()); 28908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) for (size_t i = 0; 28918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) i < params.message_port_ids.size() && i < params.new_routing_ids.size(); 28928bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ++i) { 28938bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) channels[i] = 28948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) new WebMessagePortChannelImpl(params.new_routing_ids[i], 28958bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) params.message_port_ids[i], 28968bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::MessageLoopProxy::current().get()); 28978bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 28988bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 28995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) WebSerializedScriptValue serialized_script_value; 29005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (params.is_data_raw_string) { 29015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) v8::HandleScope handle_scope(blink::mainThreadIsolate()); 29025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) v8::Local<v8::Context> context = frame->mainWorldScriptContext(); 29035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) v8::Context::Scope context_scope(context); 29045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) V8ValueConverterImpl converter; 29055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) converter.SetDateAllowed(true); 29065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) converter.SetRegExpAllowed(true); 29075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<base::Value> value(new base::StringValue(params.data)); 29085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) v8::Handle<v8::Value> result_value = converter.ToV8Value(value.get(), 29095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) context); 29105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) serialized_script_value = WebSerializedScriptValue::serialize(result_value); 29115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 29125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) serialized_script_value = WebSerializedScriptValue::fromString(params.data); 29135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 29145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 29155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create an event with the message. The final parameter to initMessageEvent 29165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is the last event ID, which is not used with postMessage. 29175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebDOMEvent event = frame->document().createEvent("MessageEvent"); 29185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebDOMMessageEvent msg_event = event.to<WebDOMMessageEvent>(); 29195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) msg_event.initMessageEvent("message", 29205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |canBubble| and |cancellable| are always false 29215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false, false, 29225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) serialized_script_value, 29238bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) params.source_origin, source_frame, "", channels); 29245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We must pass in the target_origin to do the security check on this side, 29265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // since it may have changed since the original postMessage call was made. 29275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebSecurityOrigin target_origin; 29285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!params.target_origin.empty()) { 29295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target_origin = 29305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebSecurityOrigin::createFromString(WebString(params.target_origin)); 29315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 29325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) frame->dispatchMessageEventWithOriginCheck(target_origin, msg_event); 29335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 29345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnAllowBindings(int enabled_bindings_flags) { 29362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if ((enabled_bindings_flags & BINDINGS_POLICY_WEB_UI) && 29372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !(enabled_bindings_ & BINDINGS_POLICY_WEB_UI)) { 2938effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // WebUIExtensionData deletes itself when we're destroyed. 29392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new WebUIExtensionData(this); 2940effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // WebUIMojo deletes itself when we're destroyed. 2941effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new WebUIMojo(this); 29422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 29432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 29445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enabled_bindings_ |= enabled_bindings_flags; 29455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Keep track of the total bindings accumulated in this process. 29475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderProcess::current()->AddBindings(enabled_bindings_flags); 29485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 29495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2950eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid RenderViewImpl::OnDragTargetDragEnter(const DropData& drop_data, 29515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Point& client_point, 29525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Point& screen_point, 29535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebDragOperationsMask ops, 29545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int key_modifiers) { 29555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebDragOperation operation = webview()->dragTargetDragEnter( 2956eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DropDataToWebDragData(drop_data), 29575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_point, 29585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) screen_point, 29595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ops, 29605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) key_modifiers); 29615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new DragHostMsg_UpdateDragCursor(routing_id_, operation)); 29635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 29645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnDragTargetDragOver(const gfx::Point& client_point, 29665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Point& screen_point, 29675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebDragOperationsMask ops, 29685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int key_modifiers) { 29695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebDragOperation operation = webview()->dragTargetDragOver( 29705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_point, 29715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) screen_point, 29725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ops, 29735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) key_modifiers); 29745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new DragHostMsg_UpdateDragCursor(routing_id_, operation)); 29765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 29775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnDragTargetDragLeave() { 29795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webview()->dragTargetDragLeave(); 29805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 29815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnDragTargetDrop(const gfx::Point& client_point, 29835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Point& screen_point, 29845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int key_modifiers) { 29855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webview()->dragTargetDrop(client_point, screen_point, key_modifiers); 29865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new DragHostMsg_TargetDrop_ACK(routing_id_)); 29885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 29895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2990c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid RenderViewImpl::OnDragSourceEnded(const gfx::Point& client_point, 2991c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const gfx::Point& screen_point, 2992c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch WebDragOperation op) { 2993c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch webview()->dragSourceEndedAt(client_point, screen_point, op); 29945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 29955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnDragSourceSystemDragEnded() { 29975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webview()->dragSourceSystemDragEnded(); 29985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 29995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnUpdateWebPreferences(const WebPreferences& prefs) { 30015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webkit_preferences_ = prefs; 30023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ApplyWebPreferences(webkit_preferences_, webview()); 30035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 30045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnEnumerateDirectoryResponse( 30065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id, 30072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::vector<base::FilePath>& paths) { 30085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!enumeration_completions_[id]) 30095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 30105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebVector<WebString> ws_file_names(paths.size()); 30125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < paths.size(); ++i) 3013eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ws_file_names[i] = paths[i].AsUTF16Unsafe(); 30145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enumeration_completions_[id]->didChooseFile(ws_file_names); 30165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enumeration_completions_.erase(id); 30175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 30185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnFileChooserResponse( 30205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<ui::SelectedFileInfo>& files) { 30215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This could happen if we navigated to a different page before the user 30225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // closed the chooser. 30235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (file_chooser_completions_.empty()) 30245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 30255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Convert Chrome's SelectedFileInfo list to WebKit's. 30275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebVector<WebFileChooserCompletion::SelectedFileInfo> selected_files( 30285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) files.size()); 30295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < files.size(); ++i) { 30305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebFileChooserCompletion::SelectedFileInfo selected_file; 3031eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch selected_file.path = files[i].local_path.AsUTF16Unsafe(); 3032eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch selected_file.displayName = 3033eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::FilePath(files[i].display_name).AsUTF16Unsafe(); 30345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selected_files[i] = selected_file; 30355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 30365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (file_chooser_completions_.front()->completion) 30385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file_chooser_completions_.front()->completion->didChooseFile( 30395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selected_files); 30405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file_chooser_completions_.pop_front(); 30415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If there are more pending file chooser requests, schedule one now. 30435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!file_chooser_completions_.empty()) { 30445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewHostMsg_RunFileChooser(routing_id_, 30455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file_chooser_completions_.front()->params)); 30465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 30475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 30485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnEnableAutoResize(const gfx::Size& min_size, 30505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Size& max_size) { 30515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(disable_scrollbars_size_limit_.IsEmpty()); 30525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!webview()) 30535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 30542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) auto_resize_mode_ = true; 30555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webview()->enableAutoResizeMode(min_size, max_size); 30565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 30575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnDisableAutoResize(const gfx::Size& new_size) { 30595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(disable_scrollbars_size_limit_.IsEmpty()); 30605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!webview()) 30615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 30622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) auto_resize_mode_ = false; 30635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webview()->disableAutoResizeMode(); 30645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 306590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (!new_size.IsEmpty()) { 306690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) Resize(new_size, 306790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) physical_backing_size_, 306803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) top_controls_layout_height_, 30695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu visible_viewport_size_, 307090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) resizer_rect_, 307190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) is_fullscreen_, 307290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) NO_RESIZE_ACK); 307390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 30745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 30755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnEnablePreferredSizeChangedMode() { 30775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (send_preferred_size_changes_) 30785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 30795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) send_preferred_size_changes_ = true; 30805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start off with an initial preferred size notification (in case 30825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |didUpdateLayout| was already called). 30835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) didUpdateLayout(); 30845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 30855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnDisableScrollbarsForSmallWindows( 30875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Size& disable_scrollbar_size_limit) { 30885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) disable_scrollbars_size_limit_ = disable_scrollbar_size_limit; 30895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 30905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnSetRendererPrefs( 30925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const RendererPreferences& renderer_prefs) { 30935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) double old_zoom_level = renderer_preferences_.default_zoom_level; 3094cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string old_accept_languages = renderer_preferences_.accept_languages; 3095cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 30965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) renderer_preferences_ = renderer_prefs; 30975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateFontRenderingFromRendererPrefs(); 30985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3099a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(USE_DEFAULT_RENDER_THEME) 31002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (renderer_prefs.use_custom_colors) { 3101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) WebColorName name = blink::WebColorWebkitFocusRingColor; 3102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::setNamedColors(&name, &renderer_prefs.focus_ring_color, 1); 3103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::setCaretBlinkInterval(renderer_prefs.caret_blink_interval); 31042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 31052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (webview()) { 31062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webview()->setSelectionColors( 31072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) renderer_prefs.active_selection_bg_color, 31082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) renderer_prefs.active_selection_fg_color, 31092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) renderer_prefs.inactive_selection_bg_color, 31102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) renderer_prefs.inactive_selection_fg_color); 31112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webview()->themeChanged(); 31122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 31135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3114a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#endif // defined(USE_DEFAULT_RENDER_THEME) 31152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 31165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the zoom level for this page matches the old zoom default, and this 31175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is not a plugin, update the zoom level to match the new default. 31185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (webview() && webview()->mainFrame()->isWebLocalFrame() && 31195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) !webview()->mainFrame()->document().isPluginDocument() && 31202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !ZoomValuesEqual(old_zoom_level, 31212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) renderer_preferences_.default_zoom_level) && 31225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ZoomValuesEqual(webview()->zoomLevel(), old_zoom_level)) { 3123d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) webview()->setZoomLevel(renderer_preferences_.default_zoom_level); 31245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) zoomLevelChanged(); 31255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3126cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 3127cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (webview() && 3128cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) old_accept_languages != renderer_preferences_.accept_languages) { 3129cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) webview()->acceptLanguagesChanged(); 3130cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 31315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 31325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 31335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnMediaPlayerActionAt(const gfx::Point& location, 31345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebMediaPlayerAction& action) { 31355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (webview()) 31365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webview()->performMediaPlayerAction(action, location); 31375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 31385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3139010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void RenderViewImpl::OnOrientationChange() { 3140010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // TODO(mlamouri): consumers of that event should be using DisplayObserver. 31413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) FOR_EACH_OBSERVER(RenderViewObserver, 31423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) observers_, 3143010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) OrientationChangeEvent()); 3144010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 31451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci webview()->mainFrame()->toWebLocalFrame()->sendOrientationChangeEvent(); 31465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 31475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 31485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnPluginActionAt(const gfx::Point& location, 31495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebPluginAction& action) { 31505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (webview()) 31515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webview()->performPluginAction(action, location); 31525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 31535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 31545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnGetAllSavableResourceLinksForCurrentPage( 31555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& page_url) { 31565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Prepare list to storage all savable resource links. 31575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<GURL> resources_list; 31585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<GURL> referrer_urls_list; 3159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::vector<blink::WebReferrerPolicy> referrer_policies_list; 31605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<GURL> frames_list; 316190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SavableResourcesResult result(&resources_list, 316290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) &referrer_urls_list, 316390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) &referrer_policies_list, 316490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) &frames_list); 31655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 31665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // webkit/ doesn't know about Referrer. 316790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (!GetAllSavableResourceLinksForCurrentPage( 31685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webview(), 31695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) page_url, 31705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &result, 31715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const_cast<const char**>(GetSavableSchemes()))) { 31725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If something is wrong when collecting all savable resource links, 31735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // send empty list to embedder(browser) to tell it failed. 31745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) referrer_urls_list.clear(); 31755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) referrer_policies_list.clear(); 31765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resources_list.clear(); 31775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) frames_list.clear(); 31785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 31795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 31805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<Referrer> referrers_list; 31815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK_EQ(referrer_urls_list.size(), referrer_policies_list.size()); 31825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (unsigned i = 0; i < referrer_urls_list.size(); ++i) { 31835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) referrers_list.push_back( 31845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Referrer(referrer_urls_list[i], referrer_policies_list[i])); 31855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 31865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 31875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Send result of all savable resource links to embedder. 31885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewHostMsg_SendCurrentPageAllSavableResourceLinks(routing_id(), 31895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resources_list, 31905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) referrers_list, 31915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) frames_list)); 31925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 31935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 31945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnGetSerializedHtmlDataForCurrentPageWithLocalLinks( 31955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<GURL>& links, 31962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::vector<base::FilePath>& local_paths, 31972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& local_directory_name) { 31985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 31995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Convert std::vector of GURLs to WebVector<WebURL> 32005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebVector<WebURL> weburl_links(links); 32015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3202eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Convert std::vector of base::FilePath to WebVector<WebString> 32035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebVector<WebString> webstring_paths(local_paths.size()); 32045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < local_paths.size(); i++) 3205eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch webstring_paths[i] = local_paths[i].AsUTF16Unsafe(); 32065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3207c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch WebPageSerializer::serialize(webview()->mainFrame()->toWebLocalFrame(), 3208c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch true, 3209c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch this, 3210c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch weburl_links, 32115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webstring_paths, 3212eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch local_directory_name.AsUTF16Unsafe()); 32135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 32145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3215f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void RenderViewImpl::OnSuppressDialogsUntilSwapOut() { 3216f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Don't show any more dialogs until we finish OnSwapOut. 3217f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) suppress_dialogs_until_swap_out_ = true; 3218f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 3219f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3220f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void RenderViewImpl::NavigateToSwappedOutURL(blink::WebFrame* frame) { 32215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We use loadRequest instead of loadHTMLString because the former commits 32225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // synchronously. Otherwise a new navigation can interrupt the navigation 32235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to kSwappedOutURL. If that happens to be to the page we had been 32245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // showing, then WebKit will never send a commit and we'll be left spinning. 32255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // TODO(creis): Until we move this to RenderFrame, we may call this from a 32265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // swapped out RenderFrame while our own is_swapped_out_ is false. 32275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RenderFrameImpl* rf = RenderFrameImpl::FromWebFrame(frame); 32285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CHECK(is_swapped_out_ || rf->is_swapped_out()); 32295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL swappedOutURL(kSwappedOutURL); 32305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebURLRequest request(swappedOutURL); 32315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (frame->isWebLocalFrame()) 32325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) frame->loadRequest(request); 32335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 32345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 32355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnClosePage() { 32365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FOR_EACH_OBSERVER(RenderViewObserver, observers_, ClosePage()); 32375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(creis): We'd rather use webview()->Close() here, but that currently 32385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // sets the WebView's delegate_ to NULL, preventing any JavaScript dialogs 32395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // in the onunload handler from appearing. For now, we're bypassing that and 32405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // calling the FrameLoader's CloseURL method directly. This should be 32415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // revisited to avoid having two ways to close a page. Having a single way 32425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to close that can run onunload is also useful for fixing 32435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // http://b/issue?id=753080. 3244e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch webview()->mainFrame()->dispatchUnloadEvent(); 32455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 32465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewHostMsg_ClosePage_ACK(routing_id_)); 32475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 32485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 32495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnThemeChanged() { 32505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA) 32515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Aura doesn't care if we switch themes. 32525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_WIN) 32535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::NativeThemeWin::instance()->CloseHandles(); 32545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (webview()) 32555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webview()->themeChanged(); 32565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else // defined(OS_WIN) 32575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(port): we don't support theming on non-Windows platforms yet 32585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTIMPLEMENTED(); 32595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 32605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 32615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 32625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnMoveOrResizeStarted() { 32635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (webview()) 32645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webview()->hidePopups(); 32655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 32665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 326790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void RenderViewImpl::OnResize(const ViewMsg_Resize_Params& params) { 3268116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TRACE_EVENT0("renderer", "RenderViewImpl::OnResize"); 32695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (webview()) { 32705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webview()->hidePopups(); 32715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (send_preferred_size_changes_) { 32725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webview()->mainFrame()->setCanHaveScrollbars( 327390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ShouldDisplayScrollbars(params.new_size.width(), 327490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) params.new_size.height())); 32755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 32765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 32775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3278cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gfx::Size old_visible_viewport_size = visible_viewport_size_; 3279cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 328090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) RenderWidget::OnResize(params); 3281cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 3282cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (old_visible_viewport_size != visible_viewport_size_) 3283cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) has_scrolled_focused_editable_node_into_rect_ = false; 32841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 32851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FOR_EACH_OBSERVER(RenderViewObserver, 32861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci observers_, 32871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Resized()); 32885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 32895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 32905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::DidInitiatePaint() { 32913240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#if defined(ENABLE_PLUGINS) 32925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Notify all instances that we painted. The same caveats apply as for 32935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // ViewFlushedPaint regarding instances closing themselves, so we take 32945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // similar precautions. 32955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PepperPluginSet plugins = active_pepper_instances_; 32965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (PepperPluginSet::iterator i = plugins.begin(); i != plugins.end(); ++i) { 32975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (active_pepper_instances_.find(*i) != active_pepper_instances_.end()) 32985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) (*i)->ViewInitiatedPaint(); 32995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 33003240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#endif 33015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 33025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 33035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::DidFlushPaint() { 33043240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#if defined(ENABLE_PLUGINS) 33055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Notify all instances that we flushed. This will call into the plugin, and 33065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // we it may ask to close itself as a result. This will, in turn, modify our 33075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // set, possibly invalidating the iterator. So we iterate on a copy that 33085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // won't change out from under us. 33095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PepperPluginSet plugins = active_pepper_instances_; 33105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (PepperPluginSet::iterator i = plugins.begin(); i != plugins.end(); ++i) { 33115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The copy above makes sure our iterator is never invalid if some plugins 33125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // are destroyed. But some plugin may decide to close all of its views in 33135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // response to a paint in one of them, so we need to make sure each one is 33145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // still "current" before using it. 33155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // 33165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // It's possible that a plugin was destroyed, but another one was created 33175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // with the same address. In this case, we'll call ViewFlushedPaint on that 33185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // new plugin. But that's OK for this particular case since we're just 33195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // notifying all of our instances that the view flushed, and the new one is 33205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // one of our instances. 33215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // 33225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // What about the case where a new one is created in a callback at a new 33235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // address and we don't issue the callback? We're still OK since this 33245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // callback is used for flush callbacks and we could not have possibly 33255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // started a new paint for the new plugin while processing a previous paint 33265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // for an existing one. 33275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (active_pepper_instances_.find(*i) != active_pepper_instances_.end()) 33285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) (*i)->ViewFlushedPaint(); 33295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 33303240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#endif 33315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 33325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the RenderWidget is closing down then early-exit, otherwise we'll crash. 33335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See crbug.com/112921. 33345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!webview()) 33355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 33365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 33375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebFrame* main_frame = webview()->mainFrame(); 33385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (WebFrame* frame = main_frame; frame; 33395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) frame = frame->traverseNext(false)) { 33405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (frame->isWebLocalFrame()) 33415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) main_frame = frame; 33425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 33435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 33445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If we have a provisional frame we are between the start and commit stages 33455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // of loading and we don't want to save stats. 33465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!main_frame->provisionalDataSource()) { 33475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebDataSource* ds = main_frame->dataSource(); 33485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DocumentState* document_state = DocumentState::FromDataSource(ds); 33495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 33505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(jar): The following code should all be inside a method, probably in 33515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NavigatorState. 33525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time now = Time::Now(); 33535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (document_state->first_paint_time().is_null()) { 33545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document_state->set_first_paint_time(now); 33555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 33565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (document_state->first_paint_after_load_time().is_null() && 33575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !document_state->finish_load_time().is_null()) { 33585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document_state->set_first_paint_after_load_time(now); 33595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 33605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 33615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 33625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 33635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::Vector2d RenderViewImpl::GetScrollOffset() { 33645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) WebFrame* main_frame = webview()->mainFrame(); 33655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (WebFrame* frame = main_frame; frame; 33665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) frame = frame->traverseNext(false)) { 33675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // TODO(nasko): This is a hack for the case in which the top-level 33685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // frame is being rendered in another process. It will not 33695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // behave correctly for out of process iframes. 33705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (frame->isWebLocalFrame()) { 33715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) main_frame = frame; 33725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) break; 33735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 33745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 33755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 33765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) WebSize scroll_offset = main_frame->scrollOffset(); 33775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return gfx::Vector2d(scroll_offset.width, scroll_offset.height); 33785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 33795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3380a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void RenderViewImpl::OnClearFocusedElement() { 33815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (webview()) 3382a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) webview()->clearFocusedElement(); 33835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 33845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3385cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void RenderViewImpl::OnSetBackgroundOpaque(bool opaque) { 33865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (webview()) 3387cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) webview()->setIsTransparent(!opaque); 33882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (compositor_) 3389cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) compositor_->setHasTransparentBackground(!opaque); 33905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 33915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 33925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnSetActive(bool active) { 33935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (webview()) 33945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webview()->setIsActive(active); 33955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3396bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#if defined(ENABLE_PLUGINS) && defined(OS_MACOSX) 33975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<WebPluginDelegateProxy*>::iterator plugin_it; 33985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (plugin_it = plugin_delegates_.begin(); 33995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_it != plugin_delegates_.end(); ++plugin_it) { 34005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (*plugin_it)->SetWindowFocus(active); 34015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 34025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 34035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 34045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 34065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnSetWindowVisibility(bool visible) { 3407bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#if defined(ENABLE_PLUGINS) 34085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Inform plugins that their container has changed visibility. 34095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<WebPluginDelegateProxy*>::iterator plugin_it; 34105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (plugin_it = plugin_delegates_.begin(); 34115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_it != plugin_delegates_.end(); ++plugin_it) { 34125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (*plugin_it)->SetContainerVisibility(visible); 34135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3414bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#endif 34155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 34165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnWindowFrameChanged(const gfx::Rect& window_frame, 34185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Rect& view_frame) { 3419bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#if defined(ENABLE_PLUGINS) 34205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Inform plugins that their window's frame has changed. 34215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<WebPluginDelegateProxy*>::iterator plugin_it; 34225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (plugin_it = plugin_delegates_.begin(); 34235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_it != plugin_delegates_.end(); ++plugin_it) { 34245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (*plugin_it)->WindowFrameChanged(window_frame, view_frame); 34255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3426bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#endif 34275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 34285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3429a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void RenderViewImpl::OnPluginImeCompositionCompleted(const base::string16& text, 34305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int plugin_id) { 34315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // WebPluginDelegateProxy is responsible for figuring out if this event 34325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // applies to it or not, so inform all the delegates. 34335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<WebPluginDelegateProxy*>::iterator plugin_it; 34345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (plugin_it = plugin_delegates_.begin(); 34355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_it != plugin_delegates_.end(); ++plugin_it) { 34365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (*plugin_it)->ImeCompositionCompleted(text, plugin_id); 34375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 34385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 34395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // OS_MACOSX 34405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 344146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void RenderViewImpl::OnClose() { 344246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (closing_) 344346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) RenderThread::Get()->Send(new ViewHostMsg_Close_ACK(routing_id_)); 344446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) RenderWidget::OnClose(); 344546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 344646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 34475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::Close() { 34485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We need to grab a pointer to the doomed WebView before we destroy it. 34495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebView* doomed = webview(); 34505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidget::Close(); 34515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) g_view_map.Get().erase(doomed); 34522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) g_routing_id_view_map.Get().erase(routing_id_); 345346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) RenderThread::Get()->Send(new ViewHostMsg_Close_ACK(routing_id_)); 34545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 34555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::DidHandleKeyEvent() { 34575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClearEditCommands(); 34585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 34595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3460f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool RenderViewImpl::WillHandleMouseEvent(const blink::WebMouseEvent& event) { 34615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) possible_drag_event_info_.event_source = 34625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::DragDropTypes::DRAG_EVENT_SOURCE_MOUSE; 34635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) possible_drag_event_info_.event_location = 34645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point(event.globalX, event.globalY); 34653240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 34663240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#if defined(ENABLE_PLUGINS) 34675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // This method is called for every mouse event that the render view receives. 34685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // And then the mouse event is forwarded to WebKit, which dispatches it to the 34695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // event target. Potentially a Pepper plugin will receive the event. 34705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // In order to tell whether a plugin gets the last mouse event and which it 34715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // is, we set |pepper_last_mouse_event_target_| to NULL here. If a plugin gets 34725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // the event, it will notify us via DidReceiveMouseEvent() and set itself as 34735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // |pepper_last_mouse_event_target_|. 34745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) pepper_last_mouse_event_target_ = NULL; 34753240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#endif 34765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the mouse is locked, only the current owner of the mouse lock can 34785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // process mouse events. 34795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mouse_lock_dispatcher_->WillHandleMouseEvent(event); 34805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 34815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderViewImpl::WillHandleGestureEvent( 3483f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebGestureEvent& event) { 34845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) possible_drag_event_info_.event_source = 34855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::DragDropTypes::DRAG_EVENT_SOURCE_TOUCH; 34865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) possible_drag_event_info_.event_location = 34875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point(event.globalX, event.globalY); 34885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 34895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 34905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::DidHandleMouseEvent(const WebMouseEvent& event) { 34925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FOR_EACH_OBSERVER(RenderViewObserver, observers_, DidHandleMouseEvent(event)); 34935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 34945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::DidHandleTouchEvent(const WebTouchEvent& event) { 34965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FOR_EACH_OBSERVER(RenderViewObserver, observers_, DidHandleTouchEvent(event)); 34975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 34985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool RenderViewImpl::HasTouchEventHandlersAt(const gfx::Point& point) const { 35002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!webview()) 35012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 35022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return webview()->hasTouchEventHandlersAt(point); 35032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 35042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 35055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnWasHidden() { 35065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidget::OnWasHidden(); 35075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 350868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#if defined(OS_ANDROID) && defined(ENABLE_WEBRTC) 3509c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RenderThreadImpl::current()->video_capture_impl_manager()-> 3510c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SuspendDevices(true); 35115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (speech_recognition_dispatcher_) 35125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) speech_recognition_dispatcher_->AbortAllRecognitions(); 3513c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 35145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3515b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) if (webview()) 35165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webview()->setVisibilityState(visibilityState(), false); 35175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35183240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#if defined(ENABLE_PLUGINS) 35195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (PepperPluginSet::iterator i = active_pepper_instances_.begin(); 35205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) i != active_pepper_instances_.end(); ++i) 35215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) (*i)->PageVisibilityChanged(false); 35225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 35245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Inform NPAPI plugins that their container is no longer visible. 35255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<WebPluginDelegateProxy*>::iterator plugin_it; 35265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (plugin_it = plugin_delegates_.begin(); 35275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_it != plugin_delegates_.end(); ++plugin_it) { 35285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (*plugin_it)->SetContainerVisibility(false); 35295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 35305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // OS_MACOSX 3531bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#endif // ENABLE_PLUGINS 35325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 35335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void RenderViewImpl::OnWasShown(bool needs_repainting, 35356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const ui::LatencyInfo& latency_info) { 35366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) RenderWidget::OnWasShown(needs_repainting, latency_info); 35375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3538c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_ANDROID) && defined(ENABLE_WEBRTC) 3539c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RenderThreadImpl::current()->video_capture_impl_manager()-> 3540c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SuspendDevices(false); 3541c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 3542c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3543b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) if (webview()) 35445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webview()->setVisibilityState(visibilityState(), false); 35455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35463240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#if defined(ENABLE_PLUGINS) 35475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (PepperPluginSet::iterator i = active_pepper_instances_.begin(); 35485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) i != active_pepper_instances_.end(); ++i) 35495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) (*i)->PageVisibilityChanged(true); 35505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 35525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Inform NPAPI plugins that their container is now visible. 35535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<WebPluginDelegateProxy*>::iterator plugin_it; 35545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (plugin_it = plugin_delegates_.begin(); 35555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_it != plugin_delegates_.end(); ++plugin_it) { 35565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (*plugin_it)->SetContainerVisibility(true); 35575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 35585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // OS_MACOSX 3559bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#endif // ENABLE_PLUGINS 35605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 35615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)GURL RenderViewImpl::GetURLForGraphicsContext3D() { 35632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(webview()); 35645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (webview()->mainFrame()->isWebLocalFrame()) 35652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GURL(webview()->mainFrame()->document().url()); 35662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else 35672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GURL("chrome://gpu/RenderViewImpl::CreateGraphicsContext3D"); 35685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 35695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnSetFocus(bool enable) { 35715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidget::OnSetFocus(enable); 35725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3573bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#if defined(ENABLE_PLUGINS) 35745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (webview() && webview()->isActive()) { 35755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Notify all NPAPI plugins. 35765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<WebPluginDelegateProxy*>::iterator plugin_it; 35775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (plugin_it = plugin_delegates_.begin(); 35785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_it != plugin_delegates_.end(); ++plugin_it) { 35795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 35805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderWidget's call to setFocus can cause the underlying webview's 35815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // activation state to change just like a call to setIsActive. 35825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enable) 35835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (*plugin_it)->SetWindowFocus(true); 35845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 35855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (*plugin_it)->SetContentAreaFocus(enable); 35865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 35875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 35885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Notify all Pepper plugins. 35895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (PepperPluginSet::iterator i = active_pepper_instances_.begin(); 35905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) i != active_pepper_instances_.end(); ++i) 35915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) (*i)->SetContentAreaFocus(enable); 35923240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#endif 35935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Notify all BrowserPlugins of the RenderView's focus state. 3594868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (browser_plugin_manager_.get()) 3595c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) browser_plugin_manager_->UpdateFocusState(); 35965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 35975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnImeSetComposition( 3599a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& text, 3600f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::vector<blink::WebCompositionUnderline>& underlines, 36015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int selection_start, 36025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int selection_end) { 36033240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#if defined(ENABLE_PLUGINS) 36043240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch if (focused_pepper_plugin_) { 3605a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) focused_pepper_plugin_->render_frame()->OnImeSetComposition( 3606a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) text, underlines, selection_start, selection_end); 36073240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch return; 36083240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch } 36093240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 36103240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#if defined(OS_WIN) 36113240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // When a plug-in has focus, we create platform-specific IME data used by 36123240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // our IME emulator and send it directly to the focused plug-in, i.e. we 36133240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // bypass WebKit. (WebPluginDelegate dispatches this IME data only when its 36143240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // instance ID is the same one as the specified ID.) 36153240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch if (focused_plugin_id_ >= 0) { 36163240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch std::vector<int> clauses; 36173240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch std::vector<int> target; 36183240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch for (size_t i = 0; i < underlines.size(); ++i) { 36193240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch clauses.push_back(underlines[i].startOffset); 36203240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch clauses.push_back(underlines[i].endOffset); 36213240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch if (underlines[i].thick) { 36223240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch target.clear(); 36233240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch target.push_back(underlines[i].startOffset); 36243240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch target.push_back(underlines[i].endOffset); 36253240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch } 36263240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch } 36273240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch std::set<WebPluginDelegateProxy*>::iterator it; 36283240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch for (it = plugin_delegates_.begin(); it != plugin_delegates_.end(); ++it) { 36293240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch (*it)->ImeCompositionUpdated(text, clauses, target, selection_end, 36303240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch focused_plugin_id_); 36313240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch } 36323240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch return; 36335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3634bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#endif // OS_WIN 3635bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#endif // ENABLE_PLUGINS 36363240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch RenderWidget::OnImeSetComposition(text, 36373240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch underlines, 36383240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch selection_start, 36393240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch selection_end); 36405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 36415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 364258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void RenderViewImpl::OnImeConfirmComposition( 3643a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& text, 364458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const gfx::Range& replacement_range, 364558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool keep_selection) { 36463240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#if defined(ENABLE_PLUGINS) 36473240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch if (focused_pepper_plugin_) { 3648a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) focused_pepper_plugin_->render_frame()->OnImeConfirmComposition( 3649a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) text, replacement_range, keep_selection); 36503240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch return; 36513240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch } 36523240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#if defined(OS_WIN) 36533240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Same as OnImeSetComposition(), we send the text from IMEs directly to 36543240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // plug-ins. When we send IME text directly to plug-ins, we should not send 36553240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // it to WebKit to prevent WebKit from controlling IMEs. 36563240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // TODO(thakis): Honor |replacement_range| for plugins? 36573240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch if (focused_plugin_id_ >= 0) { 36583240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch std::set<WebPluginDelegateProxy*>::iterator it; 36593240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch for (it = plugin_delegates_.begin(); 36603240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch it != plugin_delegates_.end(); ++it) { 36613240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch (*it)->ImeCompositionCompleted(text, focused_plugin_id_); 36623240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch } 36633240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch return; 36643240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch } 3665bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#endif // OS_WIN 3666bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#endif // ENABLE_PLUGINS 36673240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch if (replacement_range.IsValid() && webview()) { 36683240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Select the text in |replacement_range|, it will then be replaced by 36693240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // text added by the call to RenderWidget::OnImeConfirmComposition(). 3670c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (WebLocalFrame* frame = webview()->focusedFrame()->toWebLocalFrame()) { 36713240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch WebRange webrange = WebRange::fromDocumentRange( 36723240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch frame, replacement_range.start(), replacement_range.length()); 36733240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch if (!webrange.isNull()) 36743240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch frame->selectRange(webrange); 36755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 36765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 36773240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch RenderWidget::OnImeConfirmComposition(text, 36783240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch replacement_range, 36793240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch keep_selection); 36805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 36815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 36822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewImpl::SetDeviceScaleFactor(float device_scale_factor) { 36832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderWidget::SetDeviceScaleFactor(device_scale_factor); 36842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (webview()) { 36855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webview()->setDeviceScaleFactor(device_scale_factor); 368603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) webview()->settings()->setPreferCompositingToLCDTextEnabled( 368703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) PreferCompositingToLCDText(device_scale_factor_)); 368890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) webview()->settings()->setAcceleratedCompositingForTransitionEnabled( 368990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ShouldUseTransitionCompositing(device_scale_factor_)); 36902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 36912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (auto_resize_mode_) 36922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutoResizeCompositor(); 3693c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3694868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (browser_plugin_manager_.get()) 36951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci browser_plugin_manager_->UpdateDeviceScaleFactor(); 36965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 36975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3698f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)bool RenderViewImpl::SetDeviceColorProfile( 3699f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const std::vector<char>& profile) { 3700f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool changed = RenderWidget::SetDeviceColorProfile(profile); 3701f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (changed && webview()) { 37021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebVector<char> colorProfile = profile; 37031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci webview()->setDeviceColorProfile(colorProfile); 3704f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 3705f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return changed; 3706f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 3707f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 37081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid RenderViewImpl::ResetDeviceColorProfileForTesting() { 37091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RenderWidget::ResetDeviceColorProfileForTesting(); 37101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (webview()) 37111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci webview()->resetDeviceColorProfile(); 37121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 37131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 37145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ui::TextInputType RenderViewImpl::GetTextInputType() { 37153240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#if defined(ENABLE_PLUGINS) 37163240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch if (focused_pepper_plugin_) 37173240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch return focused_pepper_plugin_->text_input_type(); 37183240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#endif 37193240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch return RenderWidget::GetTextInputType(); 37205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 37215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 37225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::GetSelectionBounds(gfx::Rect* start, gfx::Rect* end) { 37233240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#if defined(ENABLE_PLUGINS) 37243240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch if (focused_pepper_plugin_) { 37255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(kinaba) http://crbug.com/101101 37265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Current Pepper IME API does not handle selection bounds. So we simply 37275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // use the caret position as an empty range for now. It will be updated 37285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // after Pepper API equips features related to surrounding text retrieval. 37293240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch gfx::Rect caret = focused_pepper_plugin_->GetCaretBounds(); 37305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *start = caret; 37315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *end = caret; 37325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 37335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 37343240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#endif 37355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidget::GetSelectionBounds(start, end); 37365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 37375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3738a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(OS_MACOSX) || defined(USE_AURA) 37395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::GetCompositionCharacterBounds( 37405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<gfx::Rect>* bounds) { 37415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(bounds); 37425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bounds->clear(); 37435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 37443240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#if defined(ENABLE_PLUGINS) 37453240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch if (focused_pepper_plugin_) { 3746eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return; 3747eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 37483240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#endif 37493240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 37505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!webview()) 37515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 37525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t start_offset = 0; 37535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t character_count = 0; 37545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!webview()->compositionRange(&start_offset, &character_count)) 37555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 37565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (character_count == 0) 37575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 37585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3759f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebFrame* frame = webview()->focusedFrame(); 37605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!frame) 37615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 37625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 37635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bounds->reserve(character_count); 3764f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebRect webrect; 37655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < character_count; ++i) { 37665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!frame->firstRectForCharacterRange(start_offset + i, 1, webrect)) { 37675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DLOG(ERROR) << "Could not retrieve character rectangle at " << i; 37685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bounds->clear(); 37695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 37705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 37715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bounds->push_back(webrect); 37725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 37735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 37745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 377558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void RenderViewImpl::GetCompositionRange(gfx::Range* range) { 37763240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#if defined(ENABLE_PLUGINS) 37773240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch if (focused_pepper_plugin_) { 3778eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return; 3779eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 37803240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#endif 3781eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch RenderWidget::GetCompositionRange(range); 3782eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 37837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 3784eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 37855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderViewImpl::CanComposeInline() { 37863240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#if defined(ENABLE_PLUGINS) 37873240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch if (focused_pepper_plugin_) 3788a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return focused_pepper_plugin_->IsPluginAcceptingCompositionEvents(); 37893240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#endif 37903240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch return true; 37912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 37922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3793f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void RenderViewImpl::InstrumentWillBeginFrame(int frame_id) { 37942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!webview()) 37952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 37962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!webview()->devToolsAgent()) 37972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 3798f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) webview()->devToolsAgent()->didBeginFrame(frame_id); 37992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 38002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 38012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewImpl::InstrumentDidBeginFrame() { 38022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!webview()) 38032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 38042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!webview()->devToolsAgent()) 38052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 38062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(jamesr/caseq): Decide if this needs to be renamed. 38072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webview()->devToolsAgent()->didComposite(); 38082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 38092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 38102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewImpl::InstrumentDidCancelFrame() { 38112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!webview()) 38122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 38132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!webview()->devToolsAgent()) 38142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 38152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webview()->devToolsAgent()->didCancelFrame(); 38162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 38172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 38182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewImpl::InstrumentWillComposite() { 38192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!webview()) 38202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 38212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!webview()->devToolsAgent()) 38222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 38232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webview()->devToolsAgent()->willComposite(); 38242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 38252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 38264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void RenderViewImpl::SetScreenMetricsEmulationParameters( 3827f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) float device_scale_factor, 3828f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const gfx::Point& root_layer_offset, 3829f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) float root_layer_scale) { 3830116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (webview() && compositor()) { 38314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) webview()->setCompositorDeviceScaleFactorOverride(device_scale_factor); 3832f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) webview()->setRootLayerTransform( 3833f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebSize(root_layer_offset.x(), root_layer_offset.y()), 3834f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) root_layer_scale); 38354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 38364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 38374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 38385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderViewImpl::ScheduleFileChooser( 38395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FileChooserParams& params, 38405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebFileChooserCompletion* completion) { 38415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const size_t kMaximumPendingFileChooseRequests = 4; 38425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (file_chooser_completions_.size() > kMaximumPendingFileChooseRequests) { 38435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This sanity check prevents too many file choose requests from getting 38445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // queued which could DoS the user. Getting these is most likely a 38455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // programming error (there are many ways to DoS the user so it's not 38465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // considered a "real" security check), either in JS requesting many file 38475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // choosers to pop up, or in a plugin. 38485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 38495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(brettw) we might possibly want to require a user gesture to open 38505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a file picker, which will address this issue in a better way. 38515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 38525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 38535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 38545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file_chooser_completions_.push_back(linked_ptr<PendingFileChooser>( 38555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new PendingFileChooser(params, completion))); 38565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (file_chooser_completions_.size() == 1) { 38575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Actually show the browse dialog when this is the first request. 38585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewHostMsg_RunFileChooser(routing_id_, params)); 38595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 38605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 38615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 38625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3863f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebSpeechRecognizer* RenderViewImpl::speechRecognizer() { 38645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!speech_recognition_dispatcher_) 38655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) speech_recognition_dispatcher_ = new SpeechRecognitionDispatcher(this); 38665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return speech_recognition_dispatcher_; 38675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 38685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 38695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::zoomLimitsChanged(double minimum_level, 38705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) double maximum_level) { 38715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int minimum_percent = static_cast<int>( 387258e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch ZoomLevelToZoomFactor(minimum_level) * 100); 38735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int maximum_percent = static_cast<int>( 387458e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch ZoomLevelToZoomFactor(maximum_level) * 100); 38755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 38765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewHostMsg_UpdateZoomLimits( 3877cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) routing_id_, minimum_percent, maximum_percent)); 38785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 38795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 38805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::zoomLevelChanged() { 3881010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) double zoom_level = webview()->zoomLevel(); 38825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3883010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Do not send empty URLs to the browser when we are just setting the default 3884010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // zoom level (from RendererPreferences) before the first navigation. 3885010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (!webview()->mainFrame()->document().url().isEmpty()) { 3886010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Tell the browser which url got zoomed so it can update the menu and the 3887010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // saved values if necessary 3888010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) Send(new ViewHostMsg_DidZoomURL( 3889cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) routing_id_, zoom_level, 3890010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) GURL(webview()->mainFrame()->document().url()))); 3891010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 38925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 38935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 389458e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdochdouble RenderViewImpl::zoomLevelToZoomFactor(double zoom_level) const { 389558e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch return ZoomLevelToZoomFactor(zoom_level); 389658e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch} 389758e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 389858e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdochdouble RenderViewImpl::zoomFactorToZoomLevel(double factor) const { 389958e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch return ZoomFactorToZoomLevel(factor); 390058e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch} 390158e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 390203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void RenderViewImpl::registerProtocolHandler(const WebString& scheme, 390303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const WebURL& url, 390403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const WebString& title) { 390503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) bool user_gesture = WebUserGestureIndicator::isProcessingUserGesture(); 390603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) Send(new ViewHostMsg_RegisterProtocolHandler(routing_id_, 390703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::UTF16ToUTF8(scheme), 390803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) url, 390903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) title, 391003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) user_gesture)); 391103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 391203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 391303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void RenderViewImpl::unregisterProtocolHandler(const WebString& scheme, 391403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const WebURL& url) { 391503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) bool user_gesture = WebUserGestureIndicator::isProcessingUserGesture(); 391603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) Send(new ViewHostMsg_UnregisterProtocolHandler(routing_id_, 391703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::UTF16ToUTF8(scheme), 391803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) url, 391903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) user_gesture)); 392003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 392103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 3922f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebPageVisibilityState RenderViewImpl::visibilityState() const { 3923f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebPageVisibilityState current_state = is_hidden() ? 3924f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebPageVisibilityStateHidden : 3925f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebPageVisibilityStateVisible; 3926f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebPageVisibilityState override_state = current_state; 3927a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // TODO(jam): move this method to WebFrameClient. 39285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (GetContentClient()->renderer()-> 3929a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ShouldOverridePageVisibilityState(main_render_frame_.get(), 39305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &override_state)) 39315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return override_state; 39325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return current_state; 39335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 39345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3935c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochblink::WebPushClient* RenderViewImpl::webPushClient() { 3936116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // TODO(mvanouwerkerk): Remove this method once the Push API code in Blink 3937116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // has also switched over to Frame. 3938116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return main_render_frame_->pushClient(); 3939c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 3940c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 39415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::draggableRegionsChanged() { 39425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FOR_EACH_OBSERVER( 39435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewObserver, 39445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observers_, 39455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DraggableRegionsChanged(webview()->mainFrame())); 39465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 39475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 39485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 39495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebContentDetectionResult RenderViewImpl::detectContentAround( 39505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebHitTestResult& touch_hit) { 39515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!touch_hit.isNull()); 39525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!touch_hit.node().isNull()); 39535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(touch_hit.node().isTextNode()); 39545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 39555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Process the position with all the registered content detectors until 39565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a match is found. Priority is provided by their relative order. 39575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (ContentDetectorList::const_iterator it = content_detectors_.begin(); 39585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it != content_detectors_.end(); ++it) { 39595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentDetector::Result content = (*it)->FindTappedContent(touch_hit); 39605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (content.valid) { 39615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return WebContentDetectionResult(content.content_boundaries, 39625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF8ToUTF16(content.text), content.intent_url); 39635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 39645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 39655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return WebContentDetectionResult(); 39665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 39675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 39685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::scheduleContentIntent(const WebURL& intent) { 39695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Introduce a short delay so that the user can notice the content. 3970c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::MessageLoop::current()->PostDelayedTask( 39715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FROM_HERE, 3972c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Bind(&RenderViewImpl::LaunchAndroidContentIntent, 3973c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AsWeakPtr(), 3974c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) intent, 3975c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) expected_content_intent_id_), 39765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta::FromMilliseconds(kContentIntentDelayMilliseconds)); 39775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 39785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 39795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::cancelScheduledContentIntents() { 39805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++expected_content_intent_id_; 39815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 39825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 39835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::LaunchAndroidContentIntent(const GURL& intent, 39845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t request_id) { 39855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (request_id != expected_content_intent_id_) 39865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 39875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 39885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remove the content highlighting if any. 39895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scheduleComposite(); 39905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 39915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!intent.is_empty()) 39925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewHostMsg_StartContentIntent(routing_id_, intent)); 39935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 39942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 39952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool RenderViewImpl::openDateTimeChooser( 3996f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebDateTimeChooserParams& params, 3997f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebDateTimeChooserCompletion* completion) { 3998a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // JavaScript may try to open a date time chooser while one is already open. 3999a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (date_time_picker_client_) 4000a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return false; 40012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) date_time_picker_client_.reset( 40022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new RendererDateTimePicker(this, params, completion)); 40032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return date_time_picker_client_->Open(); 40042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 40052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4006a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void RenderViewImpl::DismissDateTimeDialog() { 4007a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) DCHECK(date_time_picker_client_); 4008a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) date_time_picker_client_.reset(NULL); 4009a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 4010a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 40112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // defined(OS_ANDROID) 40125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 40135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void RenderViewImpl::OnShowContextMenu( 40145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::MenuSourceType source_type, const gfx::Point& location) { 40155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) context_menu_source_type_ = source_type; 40165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) has_host_context_menu_location_ = true; 40175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) host_context_menu_location_ = location; 4018c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (webview()) 4019c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) webview()->showContextMenu(); 40205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) has_host_context_menu_location_ = false; 4021c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 4022c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 40235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::OnEnableViewSourceMode() { 40245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!webview()) 40255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 40265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebFrame* main_frame = webview()->mainFrame(); 40275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!main_frame) 40285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 40295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_frame->enableViewSourceMode(true); 40305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 40315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 40321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(OS_ANDROID) || defined(TOOLKIT_VIEWS) 40335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderViewImpl::didTapMultipleTargets( 40341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const WebSize& inner_viewport_offset, 40351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const WebRect& touch_rect, 40365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebVector<WebRect>& target_rects) { 4037f453b36b86edd15382a7e4da454f6bb02a848b5cBen Murdoch if (!switches::IsLinkDisambiguationPopupEnabled()) 4038f453b36b86edd15382a7e4da454f6bb02a848b5cBen Murdoch return false; 4039f453b36b86edd15382a7e4da454f6bb02a848b5cBen Murdoch 40407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Never show a disambiguation popup when accessibility is enabled, 40417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // as this interferes with "touch exploration". 4042116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch AccessibilityMode accessibility_mode = 40431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetMainRenderFrame()->accessibility_mode(); 4044116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool matches_accessibility_mode_complete = 4045116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch (accessibility_mode & AccessibilityModeComplete) == 4046116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch AccessibilityModeComplete; 4047116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (matches_accessibility_mode_complete) 40487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return false; 40497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 40501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The touch_rect, target_rects and zoom_rect are in the outer viewport 40511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // reference frame. 40525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect zoom_rect; 40532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float new_total_scale = 40542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DisambiguationPopupHelper::ComputeZoomAreaAndScaleFactor( 40551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci touch_rect, target_rects, GetSize(), 40562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect(webview()->mainFrame()->visibleContentRect()).size(), 40572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) device_scale_factor_ * webview()->pageScaleFactor(), &zoom_rect); 40582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!new_total_scale) 40595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 40605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4061424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) bool handled = false; 4062424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) switch (renderer_preferences_.tap_multiple_targets_strategy) { 4063424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) case TAP_MULTIPLE_TARGETS_STRATEGY_ZOOM: 4064424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) handled = webview()->zoomToMultipleTargetsRect(zoom_rect); 4065424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) break; 4066424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) case TAP_MULTIPLE_TARGETS_STRATEGY_POPUP: { 40672385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch gfx::Size canvas_size = 40682385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch gfx::ToCeiledSize(gfx::ScaleSize(zoom_rect.size(), new_total_scale)); 40690529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch cc::SharedBitmapManager* manager = 40700529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch RenderThreadImpl::current()->shared_bitmap_manager(); 40710529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch scoped_ptr<cc::SharedBitmap> shared_bitmap = 40720529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch manager->AllocateSharedBitmap(canvas_size); 40732385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch { 40740529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch SkBitmap bitmap; 40750529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch SkImageInfo info = SkImageInfo::MakeN32Premul(canvas_size.width(), 40760529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch canvas_size.height()); 40770529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch bitmap.installPixels(info, shared_bitmap->pixels(), info.minRowBytes()); 40780529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch SkCanvas canvas(bitmap); 40792385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 40802385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch // TODO(trchen): Cleanup the device scale factor mess. 40812385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch // device scale will be applied in WebKit 40822385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch // --> zoom_rect doesn't include device scale, 40832385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch // but WebKit will still draw on zoom_rect * device_scale_factor_ 40840529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch canvas.scale(new_total_scale / device_scale_factor_, 40850529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch new_total_scale / device_scale_factor_); 40860529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch canvas.translate(-zoom_rect.x() * device_scale_factor_, 40870529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch -zoom_rect.y() * device_scale_factor_); 40882385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 4089010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) DCHECK(webwidget_->isAcceleratedCompositingActive()); 4090010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // TODO(aelias): The disambiguation popup should be composited so we 4091010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // don't have to call this method. 4092010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) webwidget_->paintCompositedDeprecated(&canvas, zoom_rect); 40932385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch } 40942385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 40951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gfx::Rect zoom_rect_in_screen = 40961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci zoom_rect - gfx::Vector2d(inner_viewport_offset.width, 40971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci inner_viewport_offset.height); 40981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 40992385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch gfx::Rect physical_window_zoom_rect = gfx::ToEnclosingRect( 41001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ClientRectToPhysicalWindowRect(gfx::RectF(zoom_rect_in_screen))); 41011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 41022385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch Send(new ViewHostMsg_ShowDisambiguationPopup(routing_id_, 41032385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch physical_window_zoom_rect, 41042385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch canvas_size, 41050529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch shared_bitmap->id())); 41060529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch cc::SharedBitmapId id = shared_bitmap->id(); 41070529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch disambiguation_bitmaps_[id] = shared_bitmap.release(); 4108424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) handled = true; 4109424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) break; 4110424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 4111424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) case TAP_MULTIPLE_TARGETS_STRATEGY_NONE: 4112424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // No-op. 4113424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) break; 41142385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch } 41155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4116424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return handled; 41175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 41181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif // defined(OS_ANDROID) || defined(TOOLKIT_VIEWS) 41195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 41202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)unsigned RenderViewImpl::GetLocalSessionHistoryLengthForTesting() const { 41212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return history_list_length_; 41222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 41232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 41242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewImpl::SetFocusAndActivateForTesting(bool enable) { 41252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (enable) { 41262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (has_focus()) 41272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 41282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnSetActive(true); 41292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnSetFocus(true); 41302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 41312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!has_focus()) 41322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 41332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnSetFocus(false); 41342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnSetActive(false); 41352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 41362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 41372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 41382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewImpl::SetDeviceScaleFactorForTesting(float factor) { 4139868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ViewMsg_Resize_Params params; 4140868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) params.screen_info = screen_info_; 4141868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) params.screen_info.deviceScaleFactor = factor; 4142868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) params.new_size = size(); 4143868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) params.physical_backing_size = 4144868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) gfx::ToCeiledSize(gfx::ScaleSize(size(), factor)); 414503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) params.top_controls_layout_height = 0.f; 4146868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) params.resizer_rect = WebRect(); 4147868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) params.is_fullscreen = is_fullscreen(); 4148868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) OnResize(params); 41492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 41502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4151010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void RenderViewImpl::SetDeviceColorProfileForTesting( 4152010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const std::vector<char>& color_profile) { 4153f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SetDeviceColorProfile(color_profile); 4154010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 4155010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 41561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void RenderViewImpl::ForceResizeForTesting(const gfx::Size& new_size) { 41571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) gfx::Rect new_position(rootWindowRect().x, 41581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) rootWindowRect().y, 41591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) new_size.width(), 41601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) new_size.height()); 41611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ResizeSynchronously(new_position); 41621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 41631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 41641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void RenderViewImpl::UseSynchronousResizeModeForTesting(bool enable) { 41651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) resizing_mode_selector_->set_is_synchronous_mode(enable); 41661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 41671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 416890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void RenderViewImpl::EnableAutoResizeForTesting(const gfx::Size& min_size, 416990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const gfx::Size& max_size) { 417090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) OnEnableAutoResize(min_size, max_size); 417190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 417290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 417390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void RenderViewImpl::DisableAutoResizeForTesting(const gfx::Size& new_size) { 417490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) OnDisableAutoResize(new_size); 417590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 417690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 41770529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvoid RenderViewImpl::OnReleaseDisambiguationPopupBitmap( 41780529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const cc::SharedBitmapId& id) { 41790529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch BitmapMap::iterator it = disambiguation_bitmaps_.find(id); 41800529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DCHECK(it != disambiguation_bitmaps_.end()); 41810529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch delete it->second; 41820529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch disambiguation_bitmaps_.erase(it); 41835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 41845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 41852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewImpl::DidCommitCompositorFrame() { 41862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderWidget::DidCommitCompositorFrame(); 41872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FOR_EACH_OBSERVER(RenderViewObserver, observers_, DidCommitCompositorFrame()); 41882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 41892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void RenderViewImpl::SendUpdateFaviconURL(const std::vector<FaviconURL>& urls) { 4191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!urls.empty()) 4192010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) Send(new ViewHostMsg_UpdateFaviconURL(routing_id_, urls)); 4193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 4194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void RenderViewImpl::DidStopLoadingIcons() { 4196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int icon_types = WebIconURL::TypeFavicon; 4197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (TouchEnabled()) 4198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) icon_types |= WebIconURL::TypeTouchPrecomposed | WebIconURL::TypeTouch; 4199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebVector<WebIconURL> icon_urls = 4201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) webview()->mainFrame()->iconURLs(icon_types); 4202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<FaviconURL> urls; 4204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (size_t i = 0; i < icon_urls.size(); i++) { 4205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebURL url = icon_urls[i].iconURL(); 42060529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch std::vector<gfx::Size> sizes; 420723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ConvertToFaviconSizes(icon_urls[i].sizes(), &sizes); 4208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!url.isEmpty()) 420923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) urls.push_back( 421023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) FaviconURL(url, ToFaviconType(icon_urls[i].iconType()), sizes)); 4211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 4212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SendUpdateFaviconURL(urls); 4213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 4214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 42155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 4216