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/browser/web_contents/web_contents_view_aura.h" | 5 #include "content/browser/web_contents/web_contents_view_aura.h" |
6 | 6 |
7 #include "base/auto_reset.h" | 7 #include "base/auto_reset.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/files/file_util.h" | 9 #include "base/files/file_util.h" |
10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
144 void stop_forwarding_events() { forward_events_ = false; } | 144 void stop_forwarding_events() { forward_events_ = false; } |
145 | 145 |
146 private: | 146 private: |
147 virtual ~OverscrollWindowDelegate() {} | 147 virtual ~OverscrollWindowDelegate() {} |
148 | 148 |
149 aura::Window* web_contents_window() { | 149 aura::Window* web_contents_window() { |
150 return web_contents_->GetView()->GetContentNativeView(); | 150 return web_contents_->GetView()->GetContentNativeView(); |
151 } | 151 } |
152 | 152 |
153 // Overridden from ui::EventHandler. | 153 // Overridden from ui::EventHandler. |
154 virtual void OnScrollEvent(ui::ScrollEvent* event) OVERRIDE { | 154 virtual void OnScrollEvent(ui::ScrollEvent* event) override { |
155 if (forward_events_ && web_contents_window()) | 155 if (forward_events_ && web_contents_window()) |
156 web_contents_window()->delegate()->OnScrollEvent(event); | 156 web_contents_window()->delegate()->OnScrollEvent(event); |
157 } | 157 } |
158 | 158 |
159 virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE { | 159 virtual void OnGestureEvent(ui::GestureEvent* event) override { |
160 if (forward_events_ && web_contents_window()) | 160 if (forward_events_ && web_contents_window()) |
161 web_contents_window()->delegate()->OnGestureEvent(event); | 161 web_contents_window()->delegate()->OnGestureEvent(event); |
162 } | 162 } |
163 | 163 |
164 WebContentsImpl* web_contents_; | 164 WebContentsImpl* web_contents_; |
165 | 165 |
166 // The window is displayed both during the gesture, and after the gesture | 166 // The window is displayed both during the gesture, and after the gesture |
167 // while the navigation is in progress. During the gesture, it is necessary to | 167 // while the navigation is in progress. During the gesture, it is necessary to |
168 // forward input events to the content page (e.g. when the overscroll window | 168 // forward input events to the content page (e.g. when the overscroll window |
169 // slides under the cursor and starts receiving scroll events). However, once | 169 // slides under the cursor and starts receiving scroll events). However, once |
(...skipping 15 matching lines...) Expand all Loading... |
185 NOTIFICATION_WEB_CONTENTS_DISCONNECTED, | 185 NOTIFICATION_WEB_CONTENTS_DISCONNECTED, |
186 Source<WebContents>(contents)); | 186 Source<WebContents>(contents)); |
187 } | 187 } |
188 | 188 |
189 virtual ~WebDragSourceAura() { | 189 virtual ~WebDragSourceAura() { |
190 } | 190 } |
191 | 191 |
192 // NotificationObserver: | 192 // NotificationObserver: |
193 virtual void Observe(int type, | 193 virtual void Observe(int type, |
194 const NotificationSource& source, | 194 const NotificationSource& source, |
195 const NotificationDetails& details) OVERRIDE { | 195 const NotificationDetails& details) override { |
196 if (type != NOTIFICATION_WEB_CONTENTS_DISCONNECTED) | 196 if (type != NOTIFICATION_WEB_CONTENTS_DISCONNECTED) |
197 return; | 197 return; |
198 | 198 |
199 // Cancel the drag if it is still in progress. | 199 // Cancel the drag if it is still in progress. |
200 aura::client::DragDropClient* dnd_client = | 200 aura::client::DragDropClient* dnd_client = |
201 aura::client::GetDragDropClient(window_->GetRootWindow()); | 201 aura::client::GetDragDropClient(window_->GetRootWindow()); |
202 if (dnd_client && dnd_client->IsDragDropInProgress()) | 202 if (dnd_client && dnd_client->IsDragDropInProgress()) |
203 dnd_client->DragCancel(); | 203 dnd_client->DragCancel(); |
204 | 204 |
205 window_ = NULL; | 205 window_ = NULL; |
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
497 root_window->RemoveObserver(this); | 497 root_window->RemoveObserver(this); |
498 const aura::Window::Windows& root_children = root_window->children(); | 498 const aura::Window::Windows& root_children = root_window->children(); |
499 for (size_t i = 0; i < root_children.size(); ++i) | 499 for (size_t i = 0; i < root_children.size(); ++i) |
500 root_children[i]->RemoveObserver(this); | 500 root_children[i]->RemoveObserver(this); |
501 } | 501 } |
502 #endif | 502 #endif |
503 } | 503 } |
504 | 504 |
505 // Overridden from aura::WindowObserver: | 505 // Overridden from aura::WindowObserver: |
506 virtual void OnWindowHierarchyChanged( | 506 virtual void OnWindowHierarchyChanged( |
507 const aura::WindowObserver::HierarchyChangeParams& params) OVERRIDE { | 507 const aura::WindowObserver::HierarchyChangeParams& params) override { |
508 if (params.receiver != view_->window_.get() || | 508 if (params.receiver != view_->window_.get() || |
509 !params.target->Contains(view_->window_.get())) { | 509 !params.target->Contains(view_->window_.get())) { |
510 return; | 510 return; |
511 } | 511 } |
512 | 512 |
513 // Use the new parent's root window for calculating HiDPI subpixel offset. | 513 // Use the new parent's root window for calculating HiDPI subpixel offset. |
514 RenderWidgetHostViewAura* rwhv = ToRenderWidgetHostViewAura( | 514 RenderWidgetHostViewAura* rwhv = ToRenderWidgetHostViewAura( |
515 view_->web_contents_->GetRenderWidgetHostView()); | 515 view_->web_contents_->GetRenderWidgetHostView()); |
516 if (rwhv) | 516 if (rwhv) |
517 rwhv->SnapToPhysicalPixelBoundary(); | 517 rwhv->SnapToPhysicalPixelBoundary(); |
518 } | 518 } |
519 | 519 |
520 #if defined(OS_WIN) | 520 #if defined(OS_WIN) |
521 // Constrained windows are added as children of the parent's parent's view | 521 // Constrained windows are added as children of the parent's parent's view |
522 // which may overlap with windowed NPAPI plugins. In that case, tell the RWHV | 522 // which may overlap with windowed NPAPI plugins. In that case, tell the RWHV |
523 // so that it can update the plugins' cutout rects accordingly. | 523 // so that it can update the plugins' cutout rects accordingly. |
524 // Note: this is hard coding how Chrome layer adds its dialogs. Since NPAPI is | 524 // Note: this is hard coding how Chrome layer adds its dialogs. Since NPAPI is |
525 // going to be deprecated in a year, this is ok for now. The test for this is | 525 // going to be deprecated in a year, this is ok for now. The test for this is |
526 // PrintPreviewTest.WindowedNPAPIPluginHidden. | 526 // PrintPreviewTest.WindowedNPAPIPluginHidden. |
527 virtual void OnWindowAdded(aura::Window* new_window) OVERRIDE { | 527 virtual void OnWindowAdded(aura::Window* new_window) override { |
528 if (!new_window->Contains(view_->window_.get())) { | 528 if (!new_window->Contains(view_->window_.get())) { |
529 // Skip the case when the parent moves to the root window. | 529 // Skip the case when the parent moves to the root window. |
530 if (new_window != host_window_) { | 530 if (new_window != host_window_) { |
531 // Observe sibling windows of the WebContents, or children of the root | 531 // Observe sibling windows of the WebContents, or children of the root |
532 // window. | 532 // window. |
533 if (new_window->parent() == host_window_ || | 533 if (new_window->parent() == host_window_ || |
534 new_window->parent() == view_->window_->GetRootWindow()) { | 534 new_window->parent() == view_->window_->GetRootWindow()) { |
535 new_window->AddObserver(this); | 535 new_window->AddObserver(this); |
536 } | 536 } |
537 } | 537 } |
538 } | 538 } |
539 | 539 |
540 if (new_window->parent() == host_window_) { | 540 if (new_window->parent() == host_window_) { |
541 UpdateConstrainedWindows(NULL); | 541 UpdateConstrainedWindows(NULL); |
542 } | 542 } |
543 } | 543 } |
544 | 544 |
545 virtual void OnWillRemoveWindow(aura::Window* window) OVERRIDE { | 545 virtual void OnWillRemoveWindow(aura::Window* window) override { |
546 if (window == view_->window_) | 546 if (window == view_->window_) |
547 return; | 547 return; |
548 | 548 |
549 window->RemoveObserver(this); | 549 window->RemoveObserver(this); |
550 UpdateConstrainedWindows(window); | 550 UpdateConstrainedWindows(window); |
551 } | 551 } |
552 | 552 |
553 virtual void OnWindowVisibilityChanged(aura::Window* window, | 553 virtual void OnWindowVisibilityChanged(aura::Window* window, |
554 bool visible) OVERRIDE { | 554 bool visible) override { |
555 if (window == view_->window_ || | 555 if (window == view_->window_ || |
556 window->parent() == host_window_ || | 556 window->parent() == host_window_ || |
557 window->parent() == view_->window_->GetRootWindow()) { | 557 window->parent() == view_->window_->GetRootWindow()) { |
558 UpdateConstrainedWindows(NULL); | 558 UpdateConstrainedWindows(NULL); |
559 } | 559 } |
560 } | 560 } |
561 #endif | 561 #endif |
562 | 562 |
563 virtual void OnWindowParentChanged(aura::Window* window, | 563 virtual void OnWindowParentChanged(aura::Window* window, |
564 aura::Window* parent) OVERRIDE { | 564 aura::Window* parent) override { |
565 if (window != view_->window_) | 565 if (window != view_->window_) |
566 return; | 566 return; |
567 | 567 |
568 aura::Window* host_window = | 568 aura::Window* host_window = |
569 window->GetProperty(aura::client::kHostWindowKey); | 569 window->GetProperty(aura::client::kHostWindowKey); |
570 if (!host_window) | 570 if (!host_window) |
571 host_window = parent; | 571 host_window = parent; |
572 | 572 |
573 if (host_window_) | 573 if (host_window_) |
574 host_window_->RemoveObserver(this); | 574 host_window_->RemoveObserver(this); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
610 if (!children[i]->Contains(view_->window_.get())) | 610 if (!children[i]->Contains(view_->window_.get())) |
611 children[i]->AddObserver(this); | 611 children[i]->AddObserver(this); |
612 } | 612 } |
613 } | 613 } |
614 #endif | 614 #endif |
615 } | 615 } |
616 } | 616 } |
617 | 617 |
618 virtual void OnWindowBoundsChanged(aura::Window* window, | 618 virtual void OnWindowBoundsChanged(aura::Window* window, |
619 const gfx::Rect& old_bounds, | 619 const gfx::Rect& old_bounds, |
620 const gfx::Rect& new_bounds) OVERRIDE { | 620 const gfx::Rect& new_bounds) override { |
621 if (window == host_window_ || window == view_->window_) { | 621 if (window == host_window_ || window == view_->window_) { |
622 SendScreenRects(); | 622 SendScreenRects(); |
623 if (view_->touch_editable_) | 623 if (view_->touch_editable_) |
624 view_->touch_editable_->UpdateEditingController(); | 624 view_->touch_editable_->UpdateEditingController(); |
625 #if defined(OS_WIN) | 625 #if defined(OS_WIN) |
626 } else { | 626 } else { |
627 UpdateConstrainedWindows(NULL); | 627 UpdateConstrainedWindows(NULL); |
628 #endif | 628 #endif |
629 } | 629 } |
630 } | 630 } |
631 | 631 |
632 virtual void OnWindowDestroying(aura::Window* window) OVERRIDE { | 632 virtual void OnWindowDestroying(aura::Window* window) override { |
633 if (window == host_window_) { | 633 if (window == host_window_) { |
634 host_window_->RemoveObserver(this); | 634 host_window_->RemoveObserver(this); |
635 host_window_ = NULL; | 635 host_window_ = NULL; |
636 } | 636 } |
637 } | 637 } |
638 | 638 |
639 virtual void OnWindowAddedToRootWindow(aura::Window* window) OVERRIDE { | 639 virtual void OnWindowAddedToRootWindow(aura::Window* window) override { |
640 if (window == view_->window_) { | 640 if (window == view_->window_) { |
641 window->GetHost()->AddObserver(this); | 641 window->GetHost()->AddObserver(this); |
642 #if defined(OS_WIN) | 642 #if defined(OS_WIN) |
643 if (!window->GetRootWindow()->HasObserver(this)) | 643 if (!window->GetRootWindow()->HasObserver(this)) |
644 window->GetRootWindow()->AddObserver(this); | 644 window->GetRootWindow()->AddObserver(this); |
645 #endif | 645 #endif |
646 } | 646 } |
647 } | 647 } |
648 | 648 |
649 virtual void OnWindowRemovingFromRootWindow(aura::Window* window, | 649 virtual void OnWindowRemovingFromRootWindow(aura::Window* window, |
650 aura::Window* new_root) OVERRIDE { | 650 aura::Window* new_root) override { |
651 if (window == view_->window_) { | 651 if (window == view_->window_) { |
652 window->GetHost()->RemoveObserver(this); | 652 window->GetHost()->RemoveObserver(this); |
653 #if defined(OS_WIN) | 653 #if defined(OS_WIN) |
654 window->GetRootWindow()->RemoveObserver(this); | 654 window->GetRootWindow()->RemoveObserver(this); |
655 | 655 |
656 const aura::Window::Windows& root_children = | 656 const aura::Window::Windows& root_children = |
657 window->GetRootWindow()->children(); | 657 window->GetRootWindow()->children(); |
658 for (size_t i = 0; i < root_children.size(); ++i) { | 658 for (size_t i = 0; i < root_children.size(); ++i) { |
659 if (root_children[i] != view_->window_ && | 659 if (root_children[i] != view_->window_ && |
660 root_children[i] != host_window_) { | 660 root_children[i] != host_window_) { |
661 root_children[i]->RemoveObserver(this); | 661 root_children[i]->RemoveObserver(this); |
662 } | 662 } |
663 } | 663 } |
664 #endif | 664 #endif |
665 } | 665 } |
666 } | 666 } |
667 | 667 |
668 // Overridden WindowTreeHostObserver: | 668 // Overridden WindowTreeHostObserver: |
669 virtual void OnHostMoved(const aura::WindowTreeHost* host, | 669 virtual void OnHostMoved(const aura::WindowTreeHost* host, |
670 const gfx::Point& new_origin) OVERRIDE { | 670 const gfx::Point& new_origin) override { |
671 TRACE_EVENT1("ui", | 671 TRACE_EVENT1("ui", |
672 "WebContentsViewAura::WindowObserver::OnHostMoved", | 672 "WebContentsViewAura::WindowObserver::OnHostMoved", |
673 "new_origin", new_origin.ToString()); | 673 "new_origin", new_origin.ToString()); |
674 | 674 |
675 // This is for the desktop case (i.e. Aura desktop). | 675 // This is for the desktop case (i.e. Aura desktop). |
676 SendScreenRects(); | 676 SendScreenRects(); |
677 } | 677 } |
678 | 678 |
679 private: | 679 private: |
680 void SendScreenRects() { | 680 void SendScreenRects() { |
(...skipping 947 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1628 if (visible) { | 1628 if (visible) { |
1629 if (!web_contents_->should_normally_be_visible()) | 1629 if (!web_contents_->should_normally_be_visible()) |
1630 web_contents_->WasShown(); | 1630 web_contents_->WasShown(); |
1631 } else { | 1631 } else { |
1632 if (web_contents_->should_normally_be_visible()) | 1632 if (web_contents_->should_normally_be_visible()) |
1633 web_contents_->WasHidden(); | 1633 web_contents_->WasHidden(); |
1634 } | 1634 } |
1635 } | 1635 } |
1636 | 1636 |
1637 } // namespace content | 1637 } // namespace content |
OLD | NEW |