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

Side by Side Diff: content/browser/web_contents/web_contents_view_aura.cc

Issue 11308083: Fix the html select tag showing up at the wrong position. This was a regression from r166446. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: fix win_rel Created 8 years, 1 month 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
OLDNEW
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/browser/web_contents/web_contents_view_aura.h" 5 #include "content/browser/web_contents/web_contents_view_aura.h"
6 6
7 #include "base/utf_string_conversions.h" 7 #include "base/utf_string_conversions.h"
8 #include "content/browser/renderer_host/dip_util.h" 8 #include "content/browser/renderer_host/dip_util.h"
9 #include "content/browser/renderer_host/overscroll_controller.h" 9 #include "content/browser/renderer_host/overscroll_controller.h"
10 #include "content/browser/renderer_host/render_view_host_factory.h" 10 #include "content/browser/renderer_host/render_view_host_factory.h"
11 #include "content/browser/renderer_host/render_widget_host_impl.h" 11 #include "content/browser/renderer_host/render_widget_host_impl.h"
12 #include "content/browser/web_contents/interstitial_page_impl.h" 12 #include "content/browser/web_contents/interstitial_page_impl.h"
13 #include "content/browser/web_contents/web_contents_impl.h" 13 #include "content/browser/web_contents/web_contents_impl.h"
14 #include "content/public/browser/notification_observer.h" 14 #include "content/public/browser/notification_observer.h"
15 #include "content/public/browser/notification_registrar.h" 15 #include "content/public/browser/notification_registrar.h"
16 #include "content/public/browser/notification_source.h" 16 #include "content/public/browser/notification_source.h"
17 #include "content/public/browser/notification_types.h" 17 #include "content/public/browser/notification_types.h"
18 #include "content/public/browser/render_view_host.h" 18 #include "content/public/browser/render_view_host.h"
19 #include "content/public/browser/render_widget_host.h" 19 #include "content/public/browser/render_widget_host.h"
20 #include "content/public/browser/render_widget_host_view.h" 20 #include "content/public/browser/render_widget_host_view.h"
21 #include "content/public/browser/web_contents_delegate.h" 21 #include "content/public/browser/web_contents_delegate.h"
22 #include "content/public/browser/web_contents_view_delegate.h" 22 #include "content/public/browser/web_contents_view_delegate.h"
23 #include "content/public/browser/web_drag_dest_delegate.h" 23 #include "content/public/browser/web_drag_dest_delegate.h"
24 #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h" 24 #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h"
25 #include "ui/aura/client/aura_constants.h" 25 #include "ui/aura/client/aura_constants.h"
26 #include "ui/aura/client/drag_drop_client.h" 26 #include "ui/aura/client/drag_drop_client.h"
27 #include "ui/aura/client/drag_drop_delegate.h" 27 #include "ui/aura/client/drag_drop_delegate.h"
28 #include "ui/aura/root_window.h" 28 #include "ui/aura/root_window.h"
29 #include "ui/aura/root_window_observer.h"
29 #include "ui/aura/window.h" 30 #include "ui/aura/window.h"
31 #include "ui/aura/window_observer.h"
30 #include "ui/base/clipboard/custom_data_helper.h" 32 #include "ui/base/clipboard/custom_data_helper.h"
31 #include "ui/base/dragdrop/drag_drop_types.h" 33 #include "ui/base/dragdrop/drag_drop_types.h"
32 #include "ui/base/dragdrop/os_exchange_data.h" 34 #include "ui/base/dragdrop/os_exchange_data.h"
33 #include "ui/base/dragdrop/os_exchange_data_provider_aura.h" 35 #include "ui/base/dragdrop/os_exchange_data_provider_aura.h"
34 #include "ui/base/events/event.h" 36 #include "ui/base/events/event.h"
35 #include "ui/base/events/event_utils.h" 37 #include "ui/base/events/event_utils.h"
36 #include "ui/base/hit_test.h" 38 #include "ui/base/hit_test.h"
37 #include "ui/compositor/layer.h" 39 #include "ui/compositor/layer.h"
38 #include "ui/compositor/scoped_layer_animation_settings.h" 40 #include "ui/compositor/scoped_layer_animation_settings.h"
39 #include "ui/gfx/screen.h" 41 #include "ui/gfx/screen.h"
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 web_input_event_modifiers |= WebKit::WebInputEvent::ControlKey; 229 web_input_event_modifiers |= WebKit::WebInputEvent::ControlKey;
228 if (aura_event_flags & ui::EF_ALT_DOWN) 230 if (aura_event_flags & ui::EF_ALT_DOWN)
229 web_input_event_modifiers |= WebKit::WebInputEvent::AltKey; 231 web_input_event_modifiers |= WebKit::WebInputEvent::AltKey;
230 if (aura_event_flags & ui::EF_COMMAND_DOWN) 232 if (aura_event_flags & ui::EF_COMMAND_DOWN)
231 web_input_event_modifiers |= WebKit::WebInputEvent::MetaKey; 233 web_input_event_modifiers |= WebKit::WebInputEvent::MetaKey;
232 return web_input_event_modifiers; 234 return web_input_event_modifiers;
233 } 235 }
234 236
235 } // namespace 237 } // namespace
236 238
239 class WebContentsViewAura::WindowObserver
240 : public aura::WindowObserver, public aura::RootWindowObserver {
241 public:
242 explicit WindowObserver(WebContentsViewAura* view)
243 : view_(view),
244 parent_(NULL) {
245 }
246
247 virtual ~WindowObserver() {
248 if (parent_)
249 parent_->RemoveObserver(this);
250 }
251
252 // Overridden from aura::WindowObserver:
253 virtual void OnWindowParentChanged(aura::Window* window,
254 aura::Window* parent) OVERRIDE {
255 if (parent_)
256 parent_->RemoveObserver(this);
257 parent_ = parent;
258 if (parent)
259 parent->AddObserver(this);
260 }
261
262 virtual void OnWindowBoundsChanged(aura::Window* window,
263 const gfx::Rect& old_bounds,
264 const gfx::Rect& new_bounds) {
265 // This is for the Ash case.
266 SendScreenRects();
267 }
268
269 virtual void OnWindowAddedToRootWindow(aura::Window* window) OVERRIDE {
270 window->GetRootWindow()->AddRootWindowObserver(this);
271 }
272
273 virtual void OnWindowRemovingFromRootWindow(aura::Window* window) OVERRIDE {
274 window->GetRootWindow()->RemoveRootWindowObserver(this);
275 }
276
277 // Overridden RootWindowObserver:
278 virtual void OnRootWindowMoved(const aura::RootWindow* root,
279 const gfx::Point& new_origin) OVERRIDE {
280 // This is for the desktop case (i.e. Aura desktop).
281 SendScreenRects();
282 }
283
284 private:
285 void SendScreenRects() {
286 if (!view_->view_)
287 return;
288 RenderWidgetHostImpl::From(view_->view_->GetRenderWidgetHost())->
289 SendScreenRects();
290 }
291
292 WebContentsViewAura* view_;
293
294 // We cache the old parent so that we can unregister when it's not the parent
295 // anymore.
296 aura::Window* parent_;
297
298 DISALLOW_COPY_AND_ASSIGN(WindowObserver);
299 };
300
237 301
238 //////////////////////////////////////////////////////////////////////////////// 302 ////////////////////////////////////////////////////////////////////////////////
239 // WebContentsViewAura, public: 303 // WebContentsViewAura, public:
240 304
241 WebContentsViewAura::WebContentsViewAura( 305 WebContentsViewAura::WebContentsViewAura(
242 WebContentsImpl* web_contents, 306 WebContentsImpl* web_contents,
243 WebContentsViewDelegate* delegate) 307 WebContentsViewDelegate* delegate)
244 : web_contents_(web_contents), 308 : web_contents_(web_contents),
245 view_(NULL), 309 view_(NULL),
246 delegate_(delegate), 310 delegate_(delegate),
247 current_drag_op_(WebKit::WebDragOperationNone), 311 current_drag_op_(WebKit::WebDragOperationNone),
248 drag_dest_delegate_(NULL), 312 drag_dest_delegate_(NULL),
249 current_rvh_for_drag_(NULL), 313 current_rvh_for_drag_(NULL),
250 current_overscroll_gesture_(OVERSCROLL_NONE), 314 current_overscroll_gesture_(OVERSCROLL_NONE),
251 completed_overscroll_gesture_(OVERSCROLL_NONE) { 315 completed_overscroll_gesture_(OVERSCROLL_NONE) {
252 } 316 }
253 317
254 //////////////////////////////////////////////////////////////////////////////// 318 ////////////////////////////////////////////////////////////////////////////////
255 // WebContentsViewAura, private: 319 // WebContentsViewAura, private:
256 320
257 WebContentsViewAura::~WebContentsViewAura() { 321 WebContentsViewAura::~WebContentsViewAura() {
322 if (!window_)
323 return;
324
325 window_->RemoveObserver(window_observer_.get());
258 // Window needs a valid delegate during its destructor, so we explicitly 326 // Window needs a valid delegate during its destructor, so we explicitly
259 // delete it here. 327 // delete it here.
260 window_.reset(); 328 window_.reset();
261 } 329 }
262 330
263 void WebContentsViewAura::SizeChangedCommon(const gfx::Size& size) { 331 void WebContentsViewAura::SizeChangedCommon(const gfx::Size& size) {
264 if (web_contents_->GetInterstitialPage()) 332 if (web_contents_->GetInterstitialPage())
265 web_contents_->GetInterstitialPage()->SetSize(size); 333 web_contents_->GetInterstitialPage()->SetSize(size);
266 RenderWidgetHostView* rwhv = 334 RenderWidgetHostView* rwhv =
267 web_contents_->GetRenderWidgetHostView(); 335 web_contents_->GetRenderWidgetHostView();
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
413 481
414 window_.reset(new aura::Window(this)); 482 window_.reset(new aura::Window(this));
415 window_->set_owned_by_parent(false); 483 window_->set_owned_by_parent(false);
416 window_->SetType(aura::client::WINDOW_TYPE_CONTROL); 484 window_->SetType(aura::client::WINDOW_TYPE_CONTROL);
417 window_->SetTransparent(false); 485 window_->SetTransparent(false);
418 window_->Init(ui::LAYER_NOT_DRAWN); 486 window_->Init(ui::LAYER_NOT_DRAWN);
419 window_->SetParent(NULL); 487 window_->SetParent(NULL);
420 window_->layer()->SetMasksToBounds(true); 488 window_->layer()->SetMasksToBounds(true);
421 window_->SetName("WebContentsViewAura"); 489 window_->SetName("WebContentsViewAura");
422 490
491 window_observer_.reset(new WindowObserver(this));
492 window_->AddObserver(window_observer_.get());
493
423 // delegate_->GetDragDestDelegate() creates a new delegate on every call. 494 // delegate_->GetDragDestDelegate() creates a new delegate on every call.
424 // Hence, we save a reference to it locally. Similar model is used on other 495 // Hence, we save a reference to it locally. Similar model is used on other
425 // platforms as well. 496 // platforms as well.
426 if (delegate_.get()) 497 if (delegate_.get())
427 drag_dest_delegate_ = delegate_->GetDragDestDelegate(); 498 drag_dest_delegate_ = delegate_->GetDragDestDelegate();
428 } 499 }
429 500
430 RenderWidgetHostView* WebContentsViewAura::CreateViewForWidget( 501 RenderWidgetHostView* WebContentsViewAura::CreateViewForWidget(
431 RenderWidgetHost* render_widget_host) { 502 RenderWidgetHost* render_widget_host) {
432 if (render_widget_host->GetView()) { 503 if (render_widget_host->GetView()) {
433 // During testing, the view will already be set up in most cases to the 504 // During testing, the view will already be set up in most cases to the
434 // test view, so we don't want to clobber it with a real one. To verify that 505 // test view, so we don't want to clobber it with a real one. To verify that
435 // this actually is happening (and somebody isn't accidentally creating the 506 // this actually is happening (and somebody isn't accidentally creating the
436 // view twice), we check for the RVH Factory, which will be set when we're 507 // view twice), we check for the RVH Factory, which will be set when we're
437 // making special ones (which go along with the special views). 508 // making special ones (which go along with the special views).
438 DCHECK(RenderViewHostFactory::has_factory()); 509 DCHECK(RenderViewHostFactory::has_factory());
439 return render_widget_host->GetView(); 510 return render_widget_host->GetView();
440 } 511 }
441 512
442 view_ = RenderWidgetHostView::CreateViewForWidget( 513 view_ = RenderWidgetHostView::CreateViewForWidget(render_widget_host);
443 render_widget_host);
444 view_->InitAsChild(NULL); 514 view_->InitAsChild(NULL);
445 GetNativeView()->AddChild(view_->GetNativeView()); 515 GetNativeView()->AddChild(view_->GetNativeView());
446 view_->Show(); 516 view_->Show();
447 517
448 // We listen to drag drop events in the newly created view's window. 518 // We listen to drag drop events in the newly created view's window.
449 aura::client::SetDragDropDelegate(view_->GetNativeView(), this); 519 aura::client::SetDragDropDelegate(view_->GetNativeView(), this);
450 520
451 RenderWidgetHostImpl* host_impl = 521 RenderWidgetHostImpl* host_impl =
452 RenderWidgetHostImpl::From(render_widget_host); 522 RenderWidgetHostImpl::From(render_widget_host);
453 if (host_impl->overscroll_controller()) 523 if (host_impl->overscroll_controller())
454 host_impl->overscroll_controller()->set_delegate(this); 524 host_impl->overscroll_controller()->set_delegate(this);
455 525
456 return view_; 526 return view_;
457 } 527 }
458 528
529 void WebContentsViewAura::SetView(RenderWidgetHostView* view) {
530 view_ = view;
531 }
532
459 gfx::NativeView WebContentsViewAura::GetNativeView() const { 533 gfx::NativeView WebContentsViewAura::GetNativeView() const {
460 return window_.get(); 534 return window_.get();
461 } 535 }
462 536
463 gfx::NativeView WebContentsViewAura::GetContentNativeView() const { 537 gfx::NativeView WebContentsViewAura::GetContentNativeView() const {
464 return view_->GetNativeView(); 538 return view_->GetNativeView();
465 } 539 }
466 540
467 gfx::NativeWindow WebContentsViewAura::GetTopLevelNativeWindow() const { 541 gfx::NativeWindow WebContentsViewAura::GetTopLevelNativeWindow() const {
468 return window_->GetToplevelWindow(); 542 return window_->GetToplevelWindow();
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after
885 event.location(), 959 event.location(),
886 gfx::Screen::GetScreenFor(GetNativeView())->GetCursorScreenPoint(), 960 gfx::Screen::GetScreenFor(GetNativeView())->GetCursorScreenPoint(),
887 ConvertAuraEventFlagsToWebInputEventModifiers(event.flags())); 961 ConvertAuraEventFlagsToWebInputEventModifiers(event.flags()));
888 if (drag_dest_delegate_) 962 if (drag_dest_delegate_)
889 drag_dest_delegate_->OnDrop(); 963 drag_dest_delegate_->OnDrop();
890 current_drop_data_.reset(); 964 current_drop_data_.reset();
891 return current_drag_op_; 965 return current_drag_op_;
892 } 966 }
893 967
894 } // namespace content 968 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/web_contents/web_contents_view_aura.h ('k') | content/browser/web_contents/web_contents_view_gtk.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698