OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/renderer/render_frame_impl.h" | 5 #include "content/renderer/render_frame_impl.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
11 #include "base/auto_reset.h" | 11 #include "base/auto_reset.h" |
12 #include "base/command_line.h" | 12 #include "base/command_line.h" |
13 #include "base/debug/alias.h" | 13 #include "base/debug/alias.h" |
14 #include "base/debug/asan_invalid_access.h" | 14 #include "base/debug/asan_invalid_access.h" |
15 #include "base/debug/dump_without_crashing.h" | 15 #include "base/debug/dump_without_crashing.h" |
16 #include "base/files/file.h" | 16 #include "base/files/file.h" |
17 #include "base/i18n/char_iterator.h" | 17 #include "base/i18n/char_iterator.h" |
18 #include "base/logging.h" | 18 #include "base/logging.h" |
19 #include "base/memory/shared_memory.h" | 19 #include "base/memory/shared_memory.h" |
20 #include "base/memory/weak_ptr.h" | 20 #include "base/memory/weak_ptr.h" |
21 #include "base/metrics/histogram.h" | 21 #include "base/metrics/histogram.h" |
22 #include "base/process/process.h" | 22 #include "base/process/process.h" |
23 #include "base/strings/string16.h" | 23 #include "base/strings/string16.h" |
24 #include "base/strings/utf_string_conversions.h" | 24 #include "base/strings/utf_string_conversions.h" |
25 #include "base/thread_task_runner_handle.h" | 25 #include "base/thread_task_runner_handle.h" |
26 #include "base/time/time.h" | 26 #include "base/time/time.h" |
| 27 #include "build/build_config.h" |
27 #include "cc/base/switches.h" | 28 #include "cc/base/switches.h" |
28 #include "components/scheduler/renderer/renderer_scheduler.h" | 29 #include "components/scheduler/renderer/renderer_scheduler.h" |
29 #include "content/child/appcache/appcache_dispatcher.h" | 30 #include "content/child/appcache/appcache_dispatcher.h" |
30 #include "content/child/permissions/permission_dispatcher.h" | 31 #include "content/child/permissions/permission_dispatcher.h" |
31 #include "content/child/plugin_messages.h" | 32 #include "content/child/plugin_messages.h" |
32 #include "content/child/quota_dispatcher.h" | 33 #include "content/child/quota_dispatcher.h" |
33 #include "content/child/request_extra_data.h" | 34 #include "content/child/request_extra_data.h" |
34 #include "content/child/service_worker/service_worker_handle_reference.h" | 35 #include "content/child/service_worker/service_worker_handle_reference.h" |
35 #include "content/child/service_worker/service_worker_network_provider.h" | 36 #include "content/child/service_worker/service_worker_network_provider.h" |
36 #include "content/child/service_worker/service_worker_provider_context.h" | 37 #include "content/child/service_worker/service_worker_provider_context.h" |
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
281 | 282 |
282 const size_t kExtraCharsBeforeAndAfterSelection = 100; | 283 const size_t kExtraCharsBeforeAndAfterSelection = 100; |
283 | 284 |
284 typedef std::map<int, RenderFrameImpl*> RoutingIDFrameMap; | 285 typedef std::map<int, RenderFrameImpl*> RoutingIDFrameMap; |
285 static base::LazyInstance<RoutingIDFrameMap> g_routing_id_frame_map = | 286 static base::LazyInstance<RoutingIDFrameMap> g_routing_id_frame_map = |
286 LAZY_INSTANCE_INITIALIZER; | 287 LAZY_INSTANCE_INITIALIZER; |
287 | 288 |
288 typedef std::map<blink::WebFrame*, RenderFrameImpl*> FrameMap; | 289 typedef std::map<blink::WebFrame*, RenderFrameImpl*> FrameMap; |
289 base::LazyInstance<FrameMap> g_frame_map = LAZY_INSTANCE_INITIALIZER; | 290 base::LazyInstance<FrameMap> g_frame_map = LAZY_INSTANCE_INITIALIZER; |
290 | 291 |
291 int64 ExtractPostId(const WebHistoryItem& item) { | 292 int64_t ExtractPostId(const WebHistoryItem& item) { |
292 if (item.isNull() || item.httpBody().isNull()) | 293 if (item.isNull() || item.httpBody().isNull()) |
293 return -1; | 294 return -1; |
294 | 295 |
295 return item.httpBody().identifier(); | 296 return item.httpBody().identifier(); |
296 } | 297 } |
297 | 298 |
298 WebURLResponseExtraDataImpl* GetExtraDataFromResponse( | 299 WebURLResponseExtraDataImpl* GetExtraDataFromResponse( |
299 const WebURLResponse& response) { | 300 const WebURLResponse& response) { |
300 return static_cast<WebURLResponseExtraDataImpl*>(response.extraData()); | 301 return static_cast<WebURLResponseExtraDataImpl*>(response.extraData()); |
301 } | 302 } |
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
607 main_resource_ssl_status.cert_status != ssl_status.cert_status || | 608 main_resource_ssl_status.cert_status != ssl_status.cert_status || |
608 main_resource_ssl_status.security_bits != ssl_status.security_bits || | 609 main_resource_ssl_status.security_bits != ssl_status.security_bits || |
609 main_resource_ssl_status.connection_status != | 610 main_resource_ssl_status.connection_status != |
610 ssl_status.connection_status); | 611 ssl_status.connection_status); |
611 } | 612 } |
612 | 613 |
613 } // namespace | 614 } // namespace |
614 | 615 |
615 // static | 616 // static |
616 RenderFrameImpl* RenderFrameImpl::Create(RenderViewImpl* render_view, | 617 RenderFrameImpl* RenderFrameImpl::Create(RenderViewImpl* render_view, |
617 int32 routing_id) { | 618 int32_t routing_id) { |
618 DCHECK(routing_id != MSG_ROUTING_NONE); | 619 DCHECK(routing_id != MSG_ROUTING_NONE); |
619 CreateParams params(render_view, routing_id); | 620 CreateParams params(render_view, routing_id); |
620 | 621 |
621 if (g_create_render_frame_impl) | 622 if (g_create_render_frame_impl) |
622 return g_create_render_frame_impl(params); | 623 return g_create_render_frame_impl(params); |
623 else | 624 else |
624 return new RenderFrameImpl(params); | 625 return new RenderFrameImpl(params); |
625 } | 626 } |
626 | 627 |
627 // static | 628 // static |
(...skipping 484 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1112 const base::string16& last_text = text.empty() ? pepper_composition_text_ | 1113 const base::string16& last_text = text.empty() ? pepper_composition_text_ |
1113 : text; | 1114 : text; |
1114 | 1115 |
1115 // last_text is empty only when both text and pepper_composition_text_ is. | 1116 // last_text is empty only when both text and pepper_composition_text_ is. |
1116 // Ignore it. | 1117 // Ignore it. |
1117 if (last_text.empty()) | 1118 if (last_text.empty()) |
1118 return; | 1119 return; |
1119 | 1120 |
1120 if (!IsPepperAcceptingCompositionEvents()) { | 1121 if (!IsPepperAcceptingCompositionEvents()) { |
1121 base::i18n::UTF16CharIterator iterator(&last_text); | 1122 base::i18n::UTF16CharIterator iterator(&last_text); |
1122 int32 i = 0; | 1123 int32_t i = 0; |
1123 while (iterator.Advance()) { | 1124 while (iterator.Advance()) { |
1124 blink::WebKeyboardEvent char_event; | 1125 blink::WebKeyboardEvent char_event; |
1125 char_event.type = blink::WebInputEvent::Char; | 1126 char_event.type = blink::WebInputEvent::Char; |
1126 char_event.timeStampSeconds = base::Time::Now().ToDoubleT(); | 1127 char_event.timeStampSeconds = base::Time::Now().ToDoubleT(); |
1127 char_event.modifiers = 0; | 1128 char_event.modifiers = 0; |
1128 char_event.windowsKeyCode = last_text[i]; | 1129 char_event.windowsKeyCode = last_text[i]; |
1129 char_event.nativeKeyCode = last_text[i]; | 1130 char_event.nativeKeyCode = last_text[i]; |
1130 | 1131 |
1131 const int32 char_start = i; | 1132 const int32_t char_start = i; |
1132 for (; i < iterator.array_pos(); ++i) { | 1133 for (; i < iterator.array_pos(); ++i) { |
1133 char_event.text[i - char_start] = last_text[i]; | 1134 char_event.text[i - char_start] = last_text[i]; |
1134 char_event.unmodifiedText[i - char_start] = last_text[i]; | 1135 char_event.unmodifiedText[i - char_start] = last_text[i]; |
1135 } | 1136 } |
1136 | 1137 |
1137 if (GetRenderWidget()->webwidget()) | 1138 if (GetRenderWidget()->webwidget()) |
1138 GetRenderWidget()->webwidget()->handleInputEvent(char_event); | 1139 GetRenderWidget()->webwidget()->handleInputEvent(char_event); |
1139 } | 1140 } |
1140 } else { | 1141 } else { |
1141 // Mimics the order of events sent by WebKit. | 1142 // Mimics the order of events sent by WebKit. |
(...skipping 620 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1762 converter.FromV8Value(result, context)); | 1763 converter.FromV8Value(result, context)); |
1763 list.Set(0, result_value ? result_value.Pass() | 1764 list.Set(0, result_value ? result_value.Pass() |
1764 : base::Value::CreateNullValue()); | 1765 : base::Value::CreateNullValue()); |
1765 } else { | 1766 } else { |
1766 list.Set(0, base::Value::CreateNullValue()); | 1767 list.Set(0, base::Value::CreateNullValue()); |
1767 } | 1768 } |
1768 Send(new FrameHostMsg_JavaScriptExecuteResponse(routing_id_, id, list)); | 1769 Send(new FrameHostMsg_JavaScriptExecuteResponse(routing_id_, id, list)); |
1769 } | 1770 } |
1770 } | 1771 } |
1771 | 1772 |
1772 void RenderFrameImpl::OnVisualStateRequest(uint64 id) { | 1773 void RenderFrameImpl::OnVisualStateRequest(uint64_t id) { |
1773 GetRenderWidget()->QueueMessage( | 1774 GetRenderWidget()->QueueMessage( |
1774 new FrameHostMsg_VisualStateResponse(routing_id_, id), | 1775 new FrameHostMsg_VisualStateResponse(routing_id_, id), |
1775 MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE); | 1776 MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE); |
1776 } | 1777 } |
1777 | 1778 |
1778 void RenderFrameImpl::OnSetEditableSelectionOffsets(int start, int end) { | 1779 void RenderFrameImpl::OnSetEditableSelectionOffsets(int start, int end) { |
1779 base::AutoReset<bool> handling_select_range(&handling_select_range_, true); | 1780 base::AutoReset<bool> handling_select_range(&handling_select_range_, true); |
1780 if (!GetRenderWidget()->ShouldHandleImeEvent()) | 1781 if (!GetRenderWidget()->ShouldHandleImeEvent()) |
1781 return; | 1782 return; |
1782 ImeEventGuard guard(GetRenderWidget()); | 1783 ImeEventGuard guard(GetRenderWidget()); |
(...skipping 847 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2630 log_severity = logging::LOG_WARNING; | 2631 log_severity = logging::LOG_WARNING; |
2631 break; | 2632 break; |
2632 case blink::WebConsoleMessage::LevelError: | 2633 case blink::WebConsoleMessage::LevelError: |
2633 log_severity = logging::LOG_ERROR; | 2634 log_severity = logging::LOG_ERROR; |
2634 break; | 2635 break; |
2635 default: | 2636 default: |
2636 log_severity = logging::LOG_VERBOSE; | 2637 log_severity = logging::LOG_VERBOSE; |
2637 } | 2638 } |
2638 | 2639 |
2639 if (shouldReportDetailedMessageForSource(source_name)) { | 2640 if (shouldReportDetailedMessageForSource(source_name)) { |
2640 FOR_EACH_OBSERVER( | 2641 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, |
2641 RenderFrameObserver, observers_, | 2642 DetailedConsoleMessageAdded( |
2642 DetailedConsoleMessageAdded(message.text, | 2643 message.text, source_name, stack_trace, source_line, |
2643 source_name, | 2644 static_cast<int32_t>(log_severity))); |
2644 stack_trace, | |
2645 source_line, | |
2646 static_cast<int32>(log_severity))); | |
2647 } | 2645 } |
2648 | 2646 |
2649 Send(new FrameHostMsg_AddMessageToConsole(routing_id_, | 2647 Send(new FrameHostMsg_AddMessageToConsole( |
2650 static_cast<int32>(log_severity), | 2648 routing_id_, static_cast<int32_t>(log_severity), message.text, |
2651 message.text, | 2649 static_cast<int32_t>(source_line), source_name)); |
2652 static_cast<int32>(source_line), | |
2653 source_name)); | |
2654 } | 2650 } |
2655 | 2651 |
2656 void RenderFrameImpl::loadURLExternally(const blink::WebURLRequest& request, | 2652 void RenderFrameImpl::loadURLExternally(const blink::WebURLRequest& request, |
2657 blink::WebNavigationPolicy policy, | 2653 blink::WebNavigationPolicy policy, |
2658 const blink::WebString& suggested_name, | 2654 const blink::WebString& suggested_name, |
2659 bool should_replace_current_entry) { | 2655 bool should_replace_current_entry) { |
2660 Referrer referrer(RenderViewImpl::GetReferrerFromRequest(frame_, request)); | 2656 Referrer referrer(RenderViewImpl::GetReferrerFromRequest(frame_, request)); |
2661 if (policy == blink::WebNavigationPolicyDownload) { | 2657 if (policy == blink::WebNavigationPolicyDownload) { |
2662 render_view_->Send(new ViewHostMsg_DownloadUrl(render_view_->GetRoutingID(), | 2658 render_view_->Send(new ViewHostMsg_DownloadUrl(render_view_->GetRoutingID(), |
2663 GetRoutingID(), | 2659 GetRoutingID(), |
(...skipping 1636 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4300 !response.isMultipartPayload() && (response.httpStatusCode() != 404); | 4296 !response.isMultipartPayload() && (response.httpStatusCode() != 404); |
4301 | 4297 |
4302 params.searchable_form_url = internal_data->searchable_form_url(); | 4298 params.searchable_form_url = internal_data->searchable_form_url(); |
4303 params.searchable_form_encoding = internal_data->searchable_form_encoding(); | 4299 params.searchable_form_encoding = internal_data->searchable_form_encoding(); |
4304 | 4300 |
4305 params.gesture = render_view_->navigation_gesture_; | 4301 params.gesture = render_view_->navigation_gesture_; |
4306 render_view_->navigation_gesture_ = NavigationGestureUnknown; | 4302 render_view_->navigation_gesture_ = NavigationGestureUnknown; |
4307 | 4303 |
4308 // Make navigation state a part of the DidCommitProvisionalLoad message so | 4304 // Make navigation state a part of the DidCommitProvisionalLoad message so |
4309 // that committed entry has it at all times. | 4305 // that committed entry has it at all times. |
4310 int64 post_id = -1; | 4306 int64_t post_id = -1; |
4311 if (!SiteIsolationPolicy::UseSubframeNavigationEntries()) { | 4307 if (!SiteIsolationPolicy::UseSubframeNavigationEntries()) { |
4312 HistoryEntry* entry = render_view_->history_controller()->GetCurrentEntry(); | 4308 HistoryEntry* entry = render_view_->history_controller()->GetCurrentEntry(); |
4313 if (entry) { | 4309 if (entry) { |
4314 params.page_state = HistoryEntryToPageState(entry); | 4310 params.page_state = HistoryEntryToPageState(entry); |
4315 post_id = ExtractPostId(entry->root()); | 4311 post_id = ExtractPostId(entry->root()); |
4316 } else { | 4312 } else { |
4317 params.page_state = PageState::CreateFromURL(request.url()); | 4313 params.page_state = PageState::CreateFromURL(request.url()); |
4318 } | 4314 } |
4319 } else { | 4315 } else { |
4320 // In --site-per-process, just send a single HistoryItem for this frame, | 4316 // In --site-per-process, just send a single HistoryItem for this frame, |
(...skipping 1321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5642 media::ConvertToSwitchOutputDeviceCB(web_callbacks); | 5638 media::ConvertToSwitchOutputDeviceCB(web_callbacks); |
5643 scoped_refptr<media::AudioOutputDevice> device = | 5639 scoped_refptr<media::AudioOutputDevice> device = |
5644 AudioDeviceFactory::NewOutputDevice(routing_id_, 0, sink_id.utf8(), | 5640 AudioDeviceFactory::NewOutputDevice(routing_id_, 0, sink_id.utf8(), |
5645 security_origin); | 5641 security_origin); |
5646 media::OutputDeviceStatus status = device->GetDeviceStatus(); | 5642 media::OutputDeviceStatus status = device->GetDeviceStatus(); |
5647 device->Stop(); | 5643 device->Stop(); |
5648 callback.Run(status); | 5644 callback.Run(status); |
5649 } | 5645 } |
5650 | 5646 |
5651 } // namespace content | 5647 } // namespace content |
OLD | NEW |