OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/renderer/render_view_impl.h" | 5 #include "content/renderer/render_view_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <cmath> | 8 #include <cmath> |
9 | 9 |
10 #include "base/auto_reset.h" | 10 #include "base/auto_reset.h" |
(...skipping 1075 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1086 IPC_MESSAGE_HANDLER(ViewMsg_CopyImageAt, OnCopyImageAt) | 1086 IPC_MESSAGE_HANDLER(ViewMsg_CopyImageAt, OnCopyImageAt) |
1087 IPC_MESSAGE_HANDLER(ViewMsg_Find, OnFind) | 1087 IPC_MESSAGE_HANDLER(ViewMsg_Find, OnFind) |
1088 IPC_MESSAGE_HANDLER(ViewMsg_StopFinding, OnStopFinding) | 1088 IPC_MESSAGE_HANDLER(ViewMsg_StopFinding, OnStopFinding) |
1089 IPC_MESSAGE_HANDLER(ViewMsg_Zoom, OnZoom) | 1089 IPC_MESSAGE_HANDLER(ViewMsg_Zoom, OnZoom) |
1090 IPC_MESSAGE_HANDLER(ViewMsg_SetZoomLevel, OnSetZoomLevel) | 1090 IPC_MESSAGE_HANDLER(ViewMsg_SetZoomLevel, OnSetZoomLevel) |
1091 IPC_MESSAGE_HANDLER(ViewMsg_SetZoomLevelForLoadingURL, | 1091 IPC_MESSAGE_HANDLER(ViewMsg_SetZoomLevelForLoadingURL, |
1092 OnSetZoomLevelForLoadingURL) | 1092 OnSetZoomLevelForLoadingURL) |
1093 IPC_MESSAGE_HANDLER(ViewMsg_SetPageEncoding, OnSetPageEncoding) | 1093 IPC_MESSAGE_HANDLER(ViewMsg_SetPageEncoding, OnSetPageEncoding) |
1094 IPC_MESSAGE_HANDLER(ViewMsg_ResetPageEncodingToDefault, | 1094 IPC_MESSAGE_HANDLER(ViewMsg_ResetPageEncodingToDefault, |
1095 OnResetPageEncodingToDefault) | 1095 OnResetPageEncodingToDefault) |
1096 IPC_MESSAGE_HANDLER(ViewMsg_ScriptEvalRequest, OnScriptEvalRequest) | |
1097 IPC_MESSAGE_HANDLER(ViewMsg_PostMessageEvent, OnPostMessageEvent) | 1096 IPC_MESSAGE_HANDLER(ViewMsg_PostMessageEvent, OnPostMessageEvent) |
1098 IPC_MESSAGE_HANDLER(DragMsg_TargetDragEnter, OnDragTargetDragEnter) | 1097 IPC_MESSAGE_HANDLER(DragMsg_TargetDragEnter, OnDragTargetDragEnter) |
1099 IPC_MESSAGE_HANDLER(DragMsg_TargetDragOver, OnDragTargetDragOver) | 1098 IPC_MESSAGE_HANDLER(DragMsg_TargetDragOver, OnDragTargetDragOver) |
1100 IPC_MESSAGE_HANDLER(DragMsg_TargetDragLeave, OnDragTargetDragLeave) | 1099 IPC_MESSAGE_HANDLER(DragMsg_TargetDragLeave, OnDragTargetDragLeave) |
1101 IPC_MESSAGE_HANDLER(DragMsg_TargetDrop, OnDragTargetDrop) | 1100 IPC_MESSAGE_HANDLER(DragMsg_TargetDrop, OnDragTargetDrop) |
1102 IPC_MESSAGE_HANDLER(DragMsg_SourceEndedOrMoved, OnDragSourceEndedOrMoved) | 1101 IPC_MESSAGE_HANDLER(DragMsg_SourceEndedOrMoved, OnDragSourceEndedOrMoved) |
1103 IPC_MESSAGE_HANDLER(DragMsg_SourceSystemDragEnded, | 1102 IPC_MESSAGE_HANDLER(DragMsg_SourceSystemDragEnded, |
1104 OnDragSourceSystemDragEnded) | 1103 OnDragSourceSystemDragEnded) |
1105 IPC_MESSAGE_HANDLER(ViewMsg_AllowBindings, OnAllowBindings) | 1104 IPC_MESSAGE_HANDLER(ViewMsg_AllowBindings, OnAllowBindings) |
1106 IPC_MESSAGE_HANDLER(ViewMsg_SetInitialFocus, OnSetInitialFocus) | 1105 IPC_MESSAGE_HANDLER(ViewMsg_SetInitialFocus, OnSetInitialFocus) |
(...skipping 1940 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3047 if (LowerCaseEqualsASCII(element.attributeValue(i), "textbox")) | 3046 if (LowerCaseEqualsASCII(element.attributeValue(i), "textbox")) |
3048 return true; | 3047 return true; |
3049 break; | 3048 break; |
3050 } | 3049 } |
3051 } | 3050 } |
3052 } | 3051 } |
3053 | 3052 |
3054 return false; | 3053 return false; |
3055 } | 3054 } |
3056 | 3055 |
3057 void RenderViewImpl::EvaluateScript(const base::string16& frame_xpath, | |
3058 const base::string16& jscript, | |
3059 int id, | |
3060 bool notify_result) { | |
3061 v8::HandleScope handle_scope(v8::Isolate::GetCurrent()); | |
3062 v8::Handle<v8::Value> result; | |
3063 | |
3064 WebFrame* web_frame; | |
3065 if (frame_xpath.empty()) { | |
3066 web_frame = webview()->mainFrame(); | |
3067 } else { | |
3068 // The |frame_xpath| string can represent a frame deep down the tree (across | |
3069 // multiple frame DOMs). | |
3070 // | |
3071 // For example, | |
3072 // /html/body/table/tbody/tr/td/iframe\n/frameset/frame[0] | |
3073 // should break into 2 xpaths: | |
3074 // /html/body/table/tbody/tr/td/iframe | |
3075 // /frameset/frame[0] | |
3076 std::vector<base::string16> xpaths; | |
3077 base::SplitString(frame_xpath, '\n', &xpaths); | |
3078 | |
3079 WebFrame* frame = webview()->mainFrame(); | |
3080 for (std::vector<base::string16>::const_iterator i = xpaths.begin(); | |
3081 frame && i != xpaths.end(); ++i) { | |
3082 frame = frame->findChildByExpression(*i); | |
3083 } | |
3084 | |
3085 web_frame = frame; | |
3086 } | |
3087 | |
3088 if (web_frame) | |
3089 result = web_frame->executeScriptAndReturnValue(WebScriptSource(jscript)); | |
3090 if (notify_result) { | |
3091 base::ListValue list; | |
3092 if (!result.IsEmpty() && web_frame) { | |
3093 v8::Local<v8::Context> context = web_frame->mainWorldScriptContext(); | |
3094 v8::Context::Scope context_scope(context); | |
3095 V8ValueConverterImpl converter; | |
3096 converter.SetDateAllowed(true); | |
3097 converter.SetRegExpAllowed(true); | |
3098 base::Value* result_value = converter.FromV8Value(result, context); | |
3099 list.Set(0, result_value ? result_value : base::Value::CreateNullValue()); | |
3100 } else { | |
3101 list.Set(0, base::Value::CreateNullValue()); | |
3102 } | |
3103 Send(new ViewHostMsg_ScriptEvalResponse(routing_id_, id, list)); | |
3104 } | |
3105 } | |
3106 | |
3107 bool RenderViewImpl::ShouldDisplayScrollbars(int width, int height) const { | 3056 bool RenderViewImpl::ShouldDisplayScrollbars(int width, int height) const { |
3108 return (!send_preferred_size_changes_ || | 3057 return (!send_preferred_size_changes_ || |
3109 (disable_scrollbars_size_limit_.width() <= width || | 3058 (disable_scrollbars_size_limit_.width() <= width || |
3110 disable_scrollbars_size_limit_.height() <= height)); | 3059 disable_scrollbars_size_limit_.height() <= height)); |
3111 } | 3060 } |
3112 | 3061 |
3113 int RenderViewImpl::GetEnabledBindings() const { | 3062 int RenderViewImpl::GetEnabledBindings() const { |
3114 return enabled_bindings_; | 3063 return enabled_bindings_; |
3115 } | 3064 } |
3116 | 3065 |
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3440 | 3389 |
3441 void RenderViewImpl::OnSetPageEncoding(const std::string& encoding_name) { | 3390 void RenderViewImpl::OnSetPageEncoding(const std::string& encoding_name) { |
3442 webview()->setPageEncoding(WebString::fromUTF8(encoding_name)); | 3391 webview()->setPageEncoding(WebString::fromUTF8(encoding_name)); |
3443 } | 3392 } |
3444 | 3393 |
3445 void RenderViewImpl::OnResetPageEncodingToDefault() { | 3394 void RenderViewImpl::OnResetPageEncodingToDefault() { |
3446 WebString no_encoding; | 3395 WebString no_encoding; |
3447 webview()->setPageEncoding(no_encoding); | 3396 webview()->setPageEncoding(no_encoding); |
3448 } | 3397 } |
3449 | 3398 |
3450 void RenderViewImpl::OnScriptEvalRequest(const base::string16& frame_xpath, | |
3451 const base::string16& jscript, | |
3452 int id, | |
3453 bool notify_result) { | |
3454 TRACE_EVENT_INSTANT0("test_tracing", "OnScriptEvalRequest", | |
3455 TRACE_EVENT_SCOPE_THREAD); | |
3456 EvaluateScript(frame_xpath, jscript, id, notify_result); | |
3457 } | |
3458 | |
3459 void RenderViewImpl::OnPostMessageEvent( | 3399 void RenderViewImpl::OnPostMessageEvent( |
3460 const ViewMsg_PostMessage_Params& params) { | 3400 const ViewMsg_PostMessage_Params& params) { |
3461 // TODO(nasko): Support sending to subframes. | 3401 // TODO(nasko): Support sending to subframes. |
3462 WebFrame* frame = webview()->mainFrame(); | 3402 WebFrame* frame = webview()->mainFrame(); |
3463 | 3403 |
3464 // Find the source frame if it exists. | 3404 // Find the source frame if it exists. |
3465 WebFrame* source_frame = NULL; | 3405 WebFrame* source_frame = NULL; |
3466 if (params.source_routing_id != MSG_ROUTING_NONE) { | 3406 if (params.source_routing_id != MSG_ROUTING_NONE) { |
3467 RenderViewImpl* source_view = FromRoutingID(params.source_routing_id); | 3407 RenderViewImpl* source_view = FromRoutingID(params.source_routing_id); |
3468 if (source_view) | 3408 if (source_view) |
(...skipping 1440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4909 std::vector<gfx::Size> sizes(icon_urls[i].sizes().size()); | 4849 std::vector<gfx::Size> sizes(icon_urls[i].sizes().size()); |
4910 ConvertToFaviconSizes(icon_urls[i].sizes(), &sizes); | 4850 ConvertToFaviconSizes(icon_urls[i].sizes(), &sizes); |
4911 if (!url.isEmpty()) | 4851 if (!url.isEmpty()) |
4912 urls.push_back( | 4852 urls.push_back( |
4913 FaviconURL(url, ToFaviconType(icon_urls[i].iconType()), sizes)); | 4853 FaviconURL(url, ToFaviconType(icon_urls[i].iconType()), sizes)); |
4914 } | 4854 } |
4915 SendUpdateFaviconURL(urls); | 4855 SendUpdateFaviconURL(urls); |
4916 } | 4856 } |
4917 | 4857 |
4918 } // namespace content | 4858 } // namespace content |
OLD | NEW |