Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1012)

Side by Side Diff: chrome/renderer/render_view.cc

Issue 2862002: Implement more of Flush properly. This adds support for waiting on the messag... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/renderer/render_view.h ('k') | webkit/glue/plugins/pepper_device_context_2d.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "chrome/renderer/render_view.h" 5 #include "chrome/renderer/render_view.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 3248 matching lines...) Expand 10 before | Expand all | Expand 10 after
3259 if (mime_type == "application/x-nacl-srpc") { 3259 if (mime_type == "application/x-nacl-srpc") {
3260 in_process_plugin = true; 3260 in_process_plugin = true;
3261 use_pepper_host = true; 3261 use_pepper_host = true;
3262 } 3262 }
3263 } 3263 }
3264 3264
3265 if (in_process_plugin) { 3265 if (in_process_plugin) {
3266 if (use_pepper_host) { 3266 if (use_pepper_host) {
3267 WebPluginDelegatePepper* pepper_plugin = 3267 WebPluginDelegatePepper* pepper_plugin =
3268 WebPluginDelegatePepper::Create(file_path, mime_type, AsWeakPtr()); 3268 WebPluginDelegatePepper::Create(file_path, mime_type, AsWeakPtr());
3269 current_pepper_plugins_.insert(pepper_plugin); 3269 current_oldstyle_pepper_plugins_.insert(pepper_plugin);
3270 return pepper_plugin; 3270 return pepper_plugin;
3271 } else { 3271 } else {
3272 #if defined(OS_WIN) // In-proc plugins aren't supported on Linux or Mac. 3272 #if defined(OS_WIN) // In-proc plugins aren't supported on Linux or Mac.
3273 return WebPluginDelegateImpl::Create( 3273 return WebPluginDelegateImpl::Create(
3274 file_path, mime_type, gfx::NativeViewFromId(host_window_)); 3274 file_path, mime_type, gfx::NativeViewFromId(host_window_));
3275 #else 3275 #else
3276 NOTIMPLEMENTED(); 3276 NOTIMPLEMENTED();
3277 return NULL; 3277 return NULL;
3278 #endif 3278 #endif
3279 } 3279 }
(...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after
3772 WebFrame* web_frame = GetChildFrame(frame_xpath); 3772 WebFrame* web_frame = GetChildFrame(frame_xpath);
3773 if (!web_frame) 3773 if (!web_frame)
3774 return; 3774 return;
3775 3775
3776 web_frame->insertStyleText(WebString::fromUTF8(css), WebString::fromUTF8(id)); 3776 web_frame->insertStyleText(WebString::fromUTF8(css), WebString::fromUTF8(id));
3777 } 3777 }
3778 3778
3779 void RenderView::OnPepperPluginDestroy( 3779 void RenderView::OnPepperPluginDestroy(
3780 WebPluginDelegatePepper* pepper_plugin) { 3780 WebPluginDelegatePepper* pepper_plugin) {
3781 std::set<WebPluginDelegatePepper*>::iterator found_pepper = 3781 std::set<WebPluginDelegatePepper*>::iterator found_pepper =
3782 current_pepper_plugins_.find(pepper_plugin); 3782 current_oldstyle_pepper_plugins_.find(pepper_plugin);
3783 if (found_pepper == current_pepper_plugins_.end()) { 3783 if (found_pepper == current_oldstyle_pepper_plugins_.end()) {
3784 NOTREACHED(); 3784 NOTREACHED();
3785 return; 3785 return;
3786 } 3786 }
3787 current_pepper_plugins_.erase(found_pepper); 3787 current_oldstyle_pepper_plugins_.erase(found_pepper);
3788 3788
3789 // The plugin could have been destroyed while it was waiting for a file 3789 // The plugin could have been destroyed while it was waiting for a file
3790 // choose callback, so check all pending completion callbacks and NULL them. 3790 // choose callback, so check all pending completion callbacks and NULL them.
3791 for (std::deque< linked_ptr<PendingFileChooser> >::iterator i = 3791 for (std::deque< linked_ptr<PendingFileChooser> >::iterator i =
3792 file_chooser_completions_.begin(); 3792 file_chooser_completions_.begin();
3793 i != file_chooser_completions_.end(); /* nothing */) { 3793 i != file_chooser_completions_.end(); /* nothing */) {
3794 if ((*i)->completion == pepper_plugin) { 3794 if ((*i)->completion == pepper_plugin) {
3795 // We NULL the first one instead of deleting it because the plugin might 3795 // We NULL the first one instead of deleting it because the plugin might
3796 // be the one waiting for a file choose callback. If the callback later 3796 // be the one waiting for a file choose callback. If the callback later
3797 // comes, we don't want to send the result to the next callback in line. 3797 // comes, we don't want to send the result to the next callback in line.
(...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after
4273 disable_scrollbars_size_limit_.width() <= new_size.width() || 4273 disable_scrollbars_size_limit_.width() <= new_size.width() ||
4274 disable_scrollbars_size_limit_.height() <= new_size.height()); 4274 disable_scrollbars_size_limit_.height() <= new_size.height());
4275 webview()->mainFrame()->setCanHaveScrollbars(allow_scrollbars); 4275 webview()->mainFrame()->setCanHaveScrollbars(allow_scrollbars);
4276 } 4276 }
4277 } 4277 }
4278 4278
4279 RenderWidget::OnResize(new_size, resizer_rect); 4279 RenderWidget::OnResize(new_size, resizer_rect);
4280 } 4280 }
4281 4281
4282 void RenderView::DidInitiatePaint() { 4282 void RenderView::DidInitiatePaint() {
4283 // Notify any pepper plugins that we started painting. The plugin "should" 4283 // Notify the pepper plugins that we started painting.
4284 // never notified that we started painting, this is used for internal 4284 pepper_delegate_.ViewInitiatedPaint();
4285 // bookkeeping only, so we know that the set can not change under us. 4285
4286 // Notify any "old-style" pepper plugins that we started painting. This is
4287 // used for internal bookkeeping only, so we know that the set can not change
4288 // under us.
4286 for (std::set<WebPluginDelegatePepper*>::iterator i = 4289 for (std::set<WebPluginDelegatePepper*>::iterator i =
4287 current_pepper_plugins_.begin(); 4290 current_oldstyle_pepper_plugins_.begin();
4288 i != current_pepper_plugins_.end(); ++i) 4291 i != current_oldstyle_pepper_plugins_.end(); ++i)
4289 (*i)->RenderViewInitiatedPaint(); 4292 (*i)->RenderViewInitiatedPaint();
4290 } 4293 }
4291 4294
4292 void RenderView::DidFlushPaint() { 4295 void RenderView::DidFlushPaint() {
4293 // Notify any pepper plugins that we painted. This will call into the plugin, 4296 // Notify any pepper plugins that we painted. This will call into the plugin,
4294 // and we it may ask to close itself as a result. This will, in turn, modify 4297 // and we it may ask to close itself as a result. This will, in turn, modify
4295 // our set, possibly invalidating the iterator. So we iterate on a copy that 4298 // our set, possibly invalidating the iterator. So we iterate on a copy that
4296 // won't change out from under us. 4299 // won't change out from under us.
4297 std::set<WebPluginDelegatePepper*> plugins = current_pepper_plugins_; 4300 pepper_delegate_.ViewFlushedPaint();
4301
4302 // Notify any old-style pepper plugins that we painted. This will call into
4303 // the plugin, and we it may ask to close itself as a result. This will, in
4304 // turn, modify our set, possibly invalidating the iterator. So we iterate on
4305 // a copy that won't change out from under us.
4306 // This should be deleted when we don't support old Pepper anymore.
4307 std::set<WebPluginDelegatePepper*> plugins = current_oldstyle_pepper_plugins_;
4298 for (std::set<WebPluginDelegatePepper*>::iterator i = plugins.begin(); 4308 for (std::set<WebPluginDelegatePepper*>::iterator i = plugins.begin();
4299 i != plugins.end(); ++i) { 4309 i != plugins.end(); ++i) {
4300 // The copy above makes sure our iterator is never invalid if some plugins 4310 // The copy above makes sure our iterator is never invalid if some plugins
4301 // are destroyed. But some plugin may decide to close all of its views in 4311 // are destroyed. But some plugin may decide to close all of its views in
4302 // response to a paint in one of them, so we need to make sure each one is 4312 // response to a paint in one of them, so we need to make sure each one is
4303 // still "current" before using it. 4313 // still "current" before using it.
4304 if (current_pepper_plugins_.find(*i) != current_pepper_plugins_.end()) 4314 if (current_oldstyle_pepper_plugins_.find(*i) !=
4315 current_oldstyle_pepper_plugins_.end())
4305 (*i)->RenderViewFlushedPaint(); 4316 (*i)->RenderViewFlushedPaint();
4306 } 4317 }
4307 4318
4308 WebFrame* main_frame = webview()->mainFrame(); 4319 WebFrame* main_frame = webview()->mainFrame();
4309 4320
4310 // If we have a provisional frame we are between the start and commit stages 4321 // If we have a provisional frame we are between the start and commit stages
4311 // of loading and we don't want to save stats. 4322 // of loading and we don't want to save stats.
4312 if (!main_frame->provisionalDataSource()) { 4323 if (!main_frame->provisionalDataSource()) {
4313 WebDataSource* ds = main_frame->dataSource(); 4324 WebDataSource* ds = main_frame->dataSource();
4314 NavigationState* navigation_state = NavigationState::FromDataSource(ds); 4325 NavigationState* navigation_state = NavigationState::FromDataSource(ds);
4315 DCHECK(navigation_state); 4326 DCHECK(navigation_state);
4316 4327
4317 Time now = Time::Now(); 4328 Time now = Time::Now();
4318 if (navigation_state->first_paint_time().is_null()) { 4329 if (navigation_state->first_paint_time().is_null()) {
4319 navigation_state->set_first_paint_time(now); 4330 navigation_state->set_first_paint_time(now);
4320 } 4331 }
4321 if (navigation_state->first_paint_after_load_time().is_null() && 4332 if (navigation_state->first_paint_after_load_time().is_null() &&
4322 !navigation_state->finish_load_time().is_null()) { 4333 !navigation_state->finish_load_time().is_null()) {
4323 navigation_state->set_first_paint_after_load_time(now); 4334 navigation_state->set_first_paint_after_load_time(now);
4324 } 4335 }
4325 } 4336 }
4326 } 4337 }
4327 4338
4328
4329 void RenderView::OnClearFocusedNode() { 4339 void RenderView::OnClearFocusedNode() {
4330 if (webview()) 4340 if (webview())
4331 webview()->clearFocusedNode(); 4341 webview()->clearFocusedNode();
4332 } 4342 }
4333 4343
4334 void RenderView::OnSetBackground(const SkBitmap& background) { 4344 void RenderView::OnSetBackground(const SkBitmap& background) {
4335 if (webview()) 4345 if (webview())
4336 webview()->setIsTransparent(!background.empty()); 4346 webview()->setIsTransparent(!background.empty());
4337 4347
4338 SetBackground(background); 4348 SetBackground(background);
(...skipping 806 matching lines...) Expand 10 before | Expand all | Expand 10 after
5145 webkit_glue::FormData form; 5155 webkit_glue::FormData form;
5146 const WebInputElement element = node.toConst<WebInputElement>(); 5156 const WebInputElement element = node.toConst<WebInputElement>();
5147 if (!form_manager_.FindFormWithFormControlElement( 5157 if (!form_manager_.FindFormWithFormControlElement(
5148 element, FormManager::REQUIRE_NONE, &form)) 5158 element, FormManager::REQUIRE_NONE, &form))
5149 return; 5159 return;
5150 5160
5151 autofill_action_ = action; 5161 autofill_action_ = action;
5152 Send(new ViewHostMsg_FillAutoFillFormData( 5162 Send(new ViewHostMsg_FillAutoFillFormData(
5153 routing_id_, autofill_query_id_, form, value, label)); 5163 routing_id_, autofill_query_id_, form, value, label));
5154 } 5164 }
OLDNEW
« no previous file with comments | « chrome/renderer/render_view.h ('k') | webkit/glue/plugins/pepper_device_context_2d.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698