| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/renderer/render_view_impl.h" | 5 #include "content/renderer/render_view_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <cmath> | 8 #include <cmath> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 1283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1294 if (!webview()) | 1294 if (!webview()) |
| 1295 return; | 1295 return; |
| 1296 | 1296 |
| 1297 handling_select_range_ = true; | 1297 handling_select_range_ = true; |
| 1298 webview()->focusedFrame()->selectRange(start, end); | 1298 webview()->focusedFrame()->selectRange(start, end); |
| 1299 handling_select_range_ = false; | 1299 handling_select_range_ = false; |
| 1300 } | 1300 } |
| 1301 | 1301 |
| 1302 void RenderViewImpl::OnSetHistoryLengthAndPrune(int history_length, | 1302 void RenderViewImpl::OnSetHistoryLengthAndPrune(int history_length, |
| 1303 int32 minimum_page_id) { | 1303 int32 minimum_page_id) { |
| 1304 DCHECK(history_length >= 0); | 1304 DCHECK_GE(history_length, 0); |
| 1305 DCHECK(history_list_offset_ == history_list_length_ - 1); | 1305 DCHECK(history_list_offset_ == history_list_length_ - 1); |
| 1306 DCHECK(minimum_page_id >= -1); | 1306 DCHECK_GE(minimum_page_id, -1); |
| 1307 | 1307 |
| 1308 // Generate the new list. | 1308 // Generate the new list. |
| 1309 std::vector<int32> new_history_page_ids(history_length, -1); | 1309 std::vector<int32> new_history_page_ids(history_length, -1); |
| 1310 for (size_t i = 0; i < history_page_ids_.size(); ++i) { | 1310 for (size_t i = 0; i < history_page_ids_.size(); ++i) { |
| 1311 if (minimum_page_id >= 0 && history_page_ids_[i] < minimum_page_id) | 1311 if (minimum_page_id >= 0 && history_page_ids_[i] < minimum_page_id) |
| 1312 continue; | 1312 continue; |
| 1313 new_history_page_ids.push_back(history_page_ids_[i]); | 1313 new_history_page_ids.push_back(history_page_ids_[i]); |
| 1314 } | 1314 } |
| 1315 new_history_page_ids.swap(history_page_ids_); | 1315 new_history_page_ids.swap(history_page_ids_); |
| 1316 | 1316 |
| (...skipping 1479 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2796 DocumentState* old_document_state = | 2796 DocumentState* old_document_state = |
| 2797 DocumentState::FromDataSource(webview()->mainFrame()->dataSource()); | 2797 DocumentState::FromDataSource(webview()->mainFrame()->dataSource()); |
| 2798 if (old_document_state) { | 2798 if (old_document_state) { |
| 2799 document_state->set_is_overriding_user_agent( | 2799 document_state->set_is_overriding_user_agent( |
| 2800 old_document_state->is_overriding_user_agent()); | 2800 old_document_state->is_overriding_user_agent()); |
| 2801 } | 2801 } |
| 2802 } | 2802 } |
| 2803 | 2803 |
| 2804 // The rest of RenderView assumes that a WebDataSource will always have a | 2804 // The rest of RenderView assumes that a WebDataSource will always have a |
| 2805 // non-null NavigationState. | 2805 // non-null NavigationState. |
| 2806 if (content_initiated) | 2806 if (content_initiated) { |
| 2807 document_state->set_navigation_state( | 2807 document_state->set_navigation_state( |
| 2808 NavigationState::CreateContentInitiated()); | 2808 NavigationState::CreateContentInitiated()); |
| 2809 else { | 2809 } else { |
| 2810 document_state->set_navigation_state(CreateNavigationStateFromPending()); | 2810 document_state->set_navigation_state(CreateNavigationStateFromPending()); |
| 2811 pending_navigation_params_.reset(); | 2811 pending_navigation_params_.reset(); |
| 2812 } | 2812 } |
| 2813 | 2813 |
| 2814 // DocumentState::referred_by_prefetcher_ is true if we are | 2814 // DocumentState::referred_by_prefetcher_ is true if we are |
| 2815 // navigating from a page that used prefetching using a link on that | 2815 // navigating from a page that used prefetching using a link on that |
| 2816 // page. We are early enough in the request process here that we | 2816 // page. We are early enough in the request process here that we |
| 2817 // can still see the DocumentState of the previous page and set | 2817 // can still see the DocumentState of the previous page and set |
| 2818 // this value appropriately. | 2818 // this value appropriately. |
| 2819 // TODO(gavinp): catch the important case of navigation in a new | 2819 // TODO(gavinp): catch the important case of navigation in a new |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2933 webview()->settings()->setViewportEnabled(true); | 2933 webview()->settings()->setViewportEnabled(true); |
| 2934 } else if (enable_fixed_layout) { | 2934 } else if (enable_fixed_layout) { |
| 2935 std::string str = | 2935 std::string str = |
| 2936 command_line.GetSwitchValueASCII(switches::kEnableFixedLayout); | 2936 command_line.GetSwitchValueASCII(switches::kEnableFixedLayout); |
| 2937 std::vector<std::string> tokens; | 2937 std::vector<std::string> tokens; |
| 2938 base::SplitString(str, ',', &tokens); | 2938 base::SplitString(str, ',', &tokens); |
| 2939 if (tokens.size() == 2) { | 2939 if (tokens.size() == 2) { |
| 2940 int width, height; | 2940 int width, height; |
| 2941 if (base::StringToInt(tokens[0], &width) && | 2941 if (base::StringToInt(tokens[0], &width) && |
| 2942 base::StringToInt(tokens[1], &height)) | 2942 base::StringToInt(tokens[1], &height)) |
| 2943 webview()->setFixedLayoutSize(WebSize(width,height)); | 2943 webview()->setFixedLayoutSize(WebSize(width, height)); |
| 2944 } | 2944 } |
| 2945 } | 2945 } |
| 2946 } | 2946 } |
| 2947 | 2947 |
| 2948 void RenderViewImpl::didStartProvisionalLoad(WebFrame* frame) { | 2948 void RenderViewImpl::didStartProvisionalLoad(WebFrame* frame) { |
| 2949 WebDataSource* ds = frame->provisionalDataSource(); | 2949 WebDataSource* ds = frame->provisionalDataSource(); |
| 2950 DocumentState* document_state = DocumentState::FromDataSource(ds); | 2950 DocumentState* document_state = DocumentState::FromDataSource(ds); |
| 2951 | 2951 |
| 2952 // Update the request time if WebKit has better knowledge of it. | 2952 // Update the request time if WebKit has better knowledge of it. |
| 2953 if (document_state->request_time().is_null()) { | 2953 if (document_state->request_time().is_null()) { |
| (...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3313 WebURLRequest& request, | 3313 WebURLRequest& request, |
| 3314 const WebURLResponse& redirect_response) { | 3314 const WebURLResponse& redirect_response) { |
| 3315 WebFrame* top_frame = frame->top(); | 3315 WebFrame* top_frame = frame->top(); |
| 3316 if (!top_frame) | 3316 if (!top_frame) |
| 3317 top_frame = frame; | 3317 top_frame = frame; |
| 3318 WebDataSource* provisional_data_source = top_frame->provisionalDataSource(); | 3318 WebDataSource* provisional_data_source = top_frame->provisionalDataSource(); |
| 3319 WebDataSource* top_data_source = top_frame->dataSource(); | 3319 WebDataSource* top_data_source = top_frame->dataSource(); |
| 3320 WebDataSource* data_source = | 3320 WebDataSource* data_source = |
| 3321 provisional_data_source ? provisional_data_source : top_data_source; | 3321 provisional_data_source ? provisional_data_source : top_data_source; |
| 3322 | 3322 |
| 3323 GURL request_url(request.url()); | |
| 3324 GURL new_url; | |
| 3325 if (content::GetContentClient()->renderer()->WillSendRequest( | |
| 3326 frame, request_url, &new_url)) { | |
| 3327 request.setURL(WebURL(new_url)); | |
| 3328 } | |
| 3329 | |
| 3330 content::PageTransition transition_type = content::PAGE_TRANSITION_LINK; | 3323 content::PageTransition transition_type = content::PAGE_TRANSITION_LINK; |
| 3331 DocumentState* document_state = DocumentState::FromDataSource(data_source); | 3324 DocumentState* document_state = DocumentState::FromDataSource(data_source); |
| 3332 DCHECK(document_state); | 3325 DCHECK(document_state); |
| 3333 NavigationState* navigation_state = document_state->navigation_state(); | 3326 NavigationState* navigation_state = document_state->navigation_state(); |
| 3327 transition_type = navigation_state->transition_type(); |
| 3328 |
| 3329 GURL request_url(request.url()); |
| 3330 GURL new_url; |
| 3331 if (content::GetContentClient()->renderer()->WillSendRequest( |
| 3332 frame, transition_type, request_url, &new_url)) { |
| 3333 request.setURL(WebURL(new_url)); |
| 3334 } |
| 3335 |
| 3334 if (document_state->is_cache_policy_override_set()) | 3336 if (document_state->is_cache_policy_override_set()) |
| 3335 request.setCachePolicy(document_state->cache_policy_override()); | 3337 request.setCachePolicy(document_state->cache_policy_override()); |
| 3336 transition_type = navigation_state->transition_type(); | |
| 3337 | 3338 |
| 3338 WebKit::WebReferrerPolicy referrer_policy; | 3339 WebKit::WebReferrerPolicy referrer_policy; |
| 3339 if (document_state && document_state->is_referrer_policy_set()) { | 3340 if (document_state && document_state->is_referrer_policy_set()) { |
| 3340 referrer_policy = document_state->referrer_policy(); | 3341 referrer_policy = document_state->referrer_policy(); |
| 3341 document_state->clear_referrer_policy(); | 3342 document_state->clear_referrer_policy(); |
| 3342 } else { | 3343 } else { |
| 3343 referrer_policy = frame->document().referrerPolicy(); | 3344 referrer_policy = frame->document().referrerPolicy(); |
| 3344 } | 3345 } |
| 3345 | 3346 |
| 3346 // The request's extra data may indicate that we should set a custom user | 3347 // The request's extra data may indicate that we should set a custom user |
| (...skipping 1191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4538 void RenderViewImpl::OnScriptEvalRequest(const string16& frame_xpath, | 4539 void RenderViewImpl::OnScriptEvalRequest(const string16& frame_xpath, |
| 4539 const string16& jscript, | 4540 const string16& jscript, |
| 4540 int id, | 4541 int id, |
| 4541 bool notify_result) { | 4542 bool notify_result) { |
| 4542 EvaluateScript(frame_xpath, jscript, id, notify_result); | 4543 EvaluateScript(frame_xpath, jscript, id, notify_result); |
| 4543 } | 4544 } |
| 4544 | 4545 |
| 4545 void RenderViewImpl::OnPostMessageEvent( | 4546 void RenderViewImpl::OnPostMessageEvent( |
| 4546 const ViewMsg_PostMessage_Params& params) { | 4547 const ViewMsg_PostMessage_Params& params) { |
| 4547 // TODO(creis): Support sending to subframes. | 4548 // TODO(creis): Support sending to subframes. |
| 4548 WebFrame *frame = webview()->mainFrame(); | 4549 WebFrame* frame = webview()->mainFrame(); |
| 4549 | 4550 |
| 4550 // Find the source frame if it exists. | 4551 // Find the source frame if it exists. |
| 4551 // TODO(creis): Support source subframes. | 4552 // TODO(creis): Support source subframes. |
| 4552 WebFrame* source_frame = NULL; | 4553 WebFrame* source_frame = NULL; |
| 4553 if (params.source_routing_id != MSG_ROUTING_NONE) { | 4554 if (params.source_routing_id != MSG_ROUTING_NONE) { |
| 4554 RenderViewImpl* source_view = FromRoutingID(params.source_routing_id); | 4555 RenderViewImpl* source_view = FromRoutingID(params.source_routing_id); |
| 4555 if (source_view) | 4556 if (source_view) |
| 4556 source_frame = source_view->webview()->mainFrame(); | 4557 source_frame = source_view->webview()->mainFrame(); |
| 4557 } | 4558 } |
| 4558 | 4559 |
| (...skipping 735 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5294 for (plugin_it = plugin_delegates_.begin(); | 5295 for (plugin_it = plugin_delegates_.begin(); |
| 5295 plugin_it != plugin_delegates_.end(); ++plugin_it) { | 5296 plugin_it != plugin_delegates_.end(); ++plugin_it) { |
| 5296 #if defined(OS_MACOSX) | 5297 #if defined(OS_MACOSX) |
| 5297 // RenderWidget's call to setFocus can cause the underlying webview's | 5298 // RenderWidget's call to setFocus can cause the underlying webview's |
| 5298 // activation state to change just like a call to setIsActive. | 5299 // activation state to change just like a call to setIsActive. |
| 5299 if (enable) | 5300 if (enable) |
| 5300 (*plugin_it)->SetWindowFocus(true); | 5301 (*plugin_it)->SetWindowFocus(true); |
| 5301 #endif | 5302 #endif |
| 5302 (*plugin_it)->SetContentAreaFocus(enable); | 5303 (*plugin_it)->SetContentAreaFocus(enable); |
| 5303 } | 5304 } |
| 5304 | |
| 5305 } | 5305 } |
| 5306 // Notify all Pepper plugins. | 5306 // Notify all Pepper plugins. |
| 5307 pepper_delegate_.OnSetFocus(enable); | 5307 pepper_delegate_.OnSetFocus(enable); |
| 5308 } | 5308 } |
| 5309 | 5309 |
| 5310 void RenderViewImpl::PpapiPluginFocusChanged() { | 5310 void RenderViewImpl::PpapiPluginFocusChanged() { |
| 5311 UpdateTextInputState(); | 5311 UpdateTextInputState(); |
| 5312 UpdateSelectionBounds(); | 5312 UpdateSelectionBounds(); |
| 5313 } | 5313 } |
| 5314 | 5314 |
| (...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5774 bool RenderViewImpl::WebWidgetHandlesCompositorScheduling() const { | 5774 bool RenderViewImpl::WebWidgetHandlesCompositorScheduling() const { |
| 5775 return !!RenderThreadImpl::current()->compositor_thread(); | 5775 return !!RenderThreadImpl::current()->compositor_thread(); |
| 5776 } | 5776 } |
| 5777 | 5777 |
| 5778 void RenderViewImpl::OnJavaBridgeInit() { | 5778 void RenderViewImpl::OnJavaBridgeInit() { |
| 5779 DCHECK(!java_bridge_dispatcher_); | 5779 DCHECK(!java_bridge_dispatcher_); |
| 5780 #if defined(ENABLE_JAVA_BRIDGE) | 5780 #if defined(ENABLE_JAVA_BRIDGE) |
| 5781 java_bridge_dispatcher_ = new JavaBridgeDispatcher(this); | 5781 java_bridge_dispatcher_ = new JavaBridgeDispatcher(this); |
| 5782 #endif | 5782 #endif |
| 5783 } | 5783 } |
| OLD | NEW |