| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "services/window_manager/window_manager_app.h" | 5 #include "services/window_manager/window_manager_app.h" |
| 6 | 6 |
| 7 #include "base/message_loop/message_loop.h" | 7 #include "base/message_loop/message_loop.h" |
| 8 #include "base/stl_util.h" | 8 #include "base/stl_util.h" |
| 9 #include "mojo/converters/geometry/geometry_type_converters.h" | 9 #include "mojo/converters/geometry/geometry_type_converters.h" |
| 10 #include "mojo/converters/input_events/input_events_type_converters.h" | 10 #include "mojo/converters/input_events/input_events_type_converters.h" |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 48 //////////////////////////////////////////////////////////////////////////////// | 48 //////////////////////////////////////////////////////////////////////////////// |
| 49 // WindowManagerApp, public: | 49 // WindowManagerApp, public: |
| 50 | 50 |
| 51 WindowManagerApp::WindowManagerApp( | 51 WindowManagerApp::WindowManagerApp( |
| 52 ViewManagerDelegate* view_manager_delegate, | 52 ViewManagerDelegate* view_manager_delegate, |
| 53 WindowManagerDelegate* window_manager_delegate) | 53 WindowManagerDelegate* window_manager_delegate) |
| 54 : shell_(nullptr), | 54 : shell_(nullptr), |
| 55 native_viewport_event_dispatcher_factory_(this), | 55 native_viewport_event_dispatcher_factory_(this), |
| 56 wrapped_view_manager_delegate_(view_manager_delegate), | 56 wrapped_view_manager_delegate_(view_manager_delegate), |
| 57 window_manager_delegate_(window_manager_delegate), | 57 window_manager_delegate_(window_manager_delegate), |
| 58 view_manager_(nullptr), | |
| 59 root_(nullptr) { | 58 root_(nullptr) { |
| 60 } | 59 } |
| 61 | 60 |
| 62 WindowManagerApp::~WindowManagerApp() { | 61 WindowManagerApp::~WindowManagerApp() { |
| 63 STLDeleteElements(&connections_); | 62 STLDeleteElements(&connections_); |
| 64 } | 63 } |
| 65 | 64 |
| 66 void WindowManagerApp::AddConnection(WindowManagerImpl* connection) { | 65 void WindowManagerApp::AddConnection(WindowManagerImpl* connection) { |
| 67 DCHECK(connections_.find(connection) == connections_.end()); | 66 DCHECK(connections_.find(connection) == connections_.end()); |
| 68 connections_.insert(connection); | 67 connections_.insert(connection); |
| 69 } | 68 } |
| 70 | 69 |
| 71 void WindowManagerApp::RemoveConnection(WindowManagerImpl* connection) { | 70 void WindowManagerApp::RemoveConnection(WindowManagerImpl* connection) { |
| 72 DCHECK(connections_.find(connection) != connections_.end()); | 71 DCHECK(connections_.find(connection) != connections_.end()); |
| 73 connections_.erase(connection); | 72 connections_.erase(connection); |
| 74 } | 73 } |
| 75 | 74 |
| 76 void WindowManagerApp::SetCapture(Id view_id) { | 75 void WindowManagerApp::SetCapture(Id view_id) { |
| 77 View* view = view_manager_->GetViewById(view_id); | 76 View* view = view_manager()->GetViewById(view_id); |
| 78 DCHECK(view); | 77 DCHECK(view); |
| 79 capture_controller_->SetCapture(view); | 78 capture_controller_->SetCapture(view); |
| 80 } | 79 } |
| 81 | 80 |
| 82 void WindowManagerApp::FocusWindow(Id view_id) { | 81 void WindowManagerApp::FocusWindow(Id view_id) { |
| 83 View* view = view_manager_->GetViewById(view_id); | 82 View* view = view_manager()->GetViewById(view_id); |
| 84 DCHECK(view); | 83 DCHECK(view); |
| 85 focus_controller_->FocusView(view); | 84 focus_controller_->FocusView(view); |
| 86 } | 85 } |
| 87 | 86 |
| 88 void WindowManagerApp::ActivateWindow(Id view_id) { | 87 void WindowManagerApp::ActivateWindow(Id view_id) { |
| 89 View* view = view_manager_->GetViewById(view_id); | 88 View* view = view_manager()->GetViewById(view_id); |
| 90 DCHECK(view); | 89 DCHECK(view); |
| 91 focus_controller_->ActivateView(view); | 90 focus_controller_->ActivateView(view); |
| 92 } | 91 } |
| 93 | 92 |
| 94 bool WindowManagerApp::IsReady() const { | 93 bool WindowManagerApp::IsReady() const { |
| 95 return view_manager_ && root_; | 94 return root_; |
| 96 } | 95 } |
| 97 | 96 |
| 98 void WindowManagerApp::InitFocus(scoped_ptr<FocusRules> rules) { | 97 void WindowManagerApp::InitFocus(scoped_ptr<FocusRules> rules) { |
| 99 DCHECK(root_); | 98 DCHECK(root_); |
| 100 | 99 |
| 101 focus_controller_.reset(new FocusController(rules.Pass())); | 100 focus_controller_.reset(new FocusController(rules.Pass())); |
| 102 focus_controller_->AddObserver(this); | 101 focus_controller_->AddObserver(this); |
| 103 SetFocusController(root_, focus_controller_.get()); | 102 SetFocusController(root_, focus_controller_.get()); |
| 104 | 103 |
| 105 capture_controller_.reset(new CaptureController); | 104 capture_controller_.reset(new CaptureController); |
| 106 capture_controller_->AddObserver(this); | 105 capture_controller_->AddObserver(this); |
| 107 SetCaptureController(root_, capture_controller_.get()); | 106 SetCaptureController(root_, capture_controller_.get()); |
| 108 } | 107 } |
| 109 | 108 |
| 110 void WindowManagerApp::Embed( | 109 void WindowManagerApp::Embed( |
| 111 const mojo::String& url, | 110 const mojo::String& url, |
| 112 mojo::InterfaceRequest<ServiceProvider> service_provider) { | 111 mojo::InterfaceRequest<ServiceProvider> service_provider) { |
| 113 if (view_manager_) { | 112 if (view_manager()) { |
| 114 window_manager_delegate_->Embed(url, service_provider.Pass()); | 113 window_manager_delegate_->Embed(url, service_provider.Pass()); |
| 115 return; | 114 return; |
| 116 } | 115 } |
| 117 scoped_ptr<PendingEmbed> pending_embed(new PendingEmbed); | 116 scoped_ptr<PendingEmbed> pending_embed(new PendingEmbed); |
| 118 pending_embed->url = url; | 117 pending_embed->url = url; |
| 119 pending_embed->service_provider = service_provider.Pass(); | 118 pending_embed->service_provider = service_provider.Pass(); |
| 120 pending_embeds_.push_back(pending_embed.release()); | 119 pending_embeds_.push_back(pending_embed.release()); |
| 121 } | 120 } |
| 122 | 121 |
| 123 //////////////////////////////////////////////////////////////////////////////// | 122 //////////////////////////////////////////////////////////////////////////////// |
| 124 // WindowManagerApp, ApplicationDelegate implementation: | 123 // WindowManagerApp, ApplicationDelegate implementation: |
| 125 | 124 |
| 126 void WindowManagerApp::Initialize(mojo::ApplicationImpl* impl) { | 125 void WindowManagerApp::Initialize(mojo::ApplicationImpl* impl) { |
| 127 shell_ = impl->shell(); | 126 shell_ = impl->shell(); |
| 128 LaunchViewManager(impl); | 127 LaunchViewManager(impl); |
| 129 } | 128 } |
| 130 | 129 |
| 131 bool WindowManagerApp::ConfigureIncomingConnection( | 130 bool WindowManagerApp::ConfigureIncomingConnection( |
| 132 ApplicationConnection* connection) { | 131 ApplicationConnection* connection) { |
| 133 connection->AddService(static_cast<InterfaceFactory<WindowManager>*>(this)); | 132 connection->AddService(static_cast<InterfaceFactory<WindowManager>*>(this)); |
| 134 return true; | 133 return true; |
| 135 } | 134 } |
| 136 | 135 |
| 137 //////////////////////////////////////////////////////////////////////////////// | 136 //////////////////////////////////////////////////////////////////////////////// |
| 138 // WindowManagerApp, ViewManagerDelegate implementation: | 137 // WindowManagerApp, ViewManagerDelegate implementation: |
| 139 | 138 |
| 140 void WindowManagerApp::OnEmbed(mojo::ViewManager* view_manager, | 139 void WindowManagerApp::OnEmbed(View* root, |
| 141 View* root, | |
| 142 mojo::ServiceProviderImpl* exported_services, | 140 mojo::ServiceProviderImpl* exported_services, |
| 143 scoped_ptr<ServiceProvider> imported_services) { | 141 scoped_ptr<ServiceProvider> imported_services) { |
| 144 DCHECK(!view_manager_ && !root_); | 142 DCHECK(!root_); |
| 145 view_manager_ = view_manager; | |
| 146 root_ = root; | 143 root_ = root; |
| 147 | 144 |
| 148 view_event_dispatcher_.reset(new ViewEventDispatcher); | 145 view_event_dispatcher_.reset(new ViewEventDispatcher); |
| 149 | 146 |
| 150 RegisterSubtree(root_); | 147 RegisterSubtree(root_); |
| 151 | 148 |
| 152 if (wrapped_view_manager_delegate_) { | 149 if (wrapped_view_manager_delegate_) { |
| 153 wrapped_view_manager_delegate_->OnEmbed( | 150 wrapped_view_manager_delegate_->OnEmbed(root, exported_services, |
| 154 view_manager, root, exported_services, imported_services.Pass()); | 151 imported_services.Pass()); |
| 155 } | 152 } |
| 156 | 153 |
| 157 for (PendingEmbed* pending_embed : pending_embeds_) | 154 for (PendingEmbed* pending_embed : pending_embeds_) |
| 158 Embed(pending_embed->url, pending_embed->service_provider.Pass()); | 155 Embed(pending_embed->url, pending_embed->service_provider.Pass()); |
| 159 pending_embeds_.clear(); | 156 pending_embeds_.clear(); |
| 160 } | 157 } |
| 161 | 158 |
| 162 void WindowManagerApp::OnViewManagerDisconnected( | 159 void WindowManagerApp::OnViewManagerDisconnected( |
| 163 mojo::ViewManager* view_manager) { | 160 mojo::ViewManager* view_manager) { |
| 164 DCHECK_EQ(view_manager_, view_manager); | 161 DCHECK(this->view_manager()); |
| 162 DCHECK_EQ(this->view_manager(), view_manager); |
| 165 if (wrapped_view_manager_delegate_) | 163 if (wrapped_view_manager_delegate_) |
| 166 wrapped_view_manager_delegate_->OnViewManagerDisconnected(view_manager); | 164 wrapped_view_manager_delegate_->OnViewManagerDisconnected(view_manager); |
| 167 view_manager_ = nullptr; | 165 root_ = nullptr; |
| 168 base::MessageLoop::current()->Quit(); | 166 base::MessageLoop::current()->Quit(); |
| 169 } | 167 } |
| 170 | 168 |
| 171 //////////////////////////////////////////////////////////////////////////////// | 169 //////////////////////////////////////////////////////////////////////////////// |
| 172 // WindowManagerApp, ViewObserver implementation: | 170 // WindowManagerApp, ViewObserver implementation: |
| 173 | 171 |
| 174 void WindowManagerApp::OnTreeChanged( | 172 void WindowManagerApp::OnTreeChanged( |
| 175 const ViewObserver::TreeChangeParams& params) { | 173 const ViewObserver::TreeChangeParams& params) { |
| 176 if (params.receiver != root_) | 174 if (params.receiver != root_) |
| 177 return; | 175 return; |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 354 uint16_t connection_id, | 352 uint16_t connection_id, |
| 355 mojo::ScopedMessagePipeHandle window_manager_pipe) { | 353 mojo::ScopedMessagePipeHandle window_manager_pipe) { |
| 356 // TODO(sky): pass in |connection_id| for validation. | 354 // TODO(sky): pass in |connection_id| for validation. |
| 357 WindowManagerImpl* wm = new WindowManagerImpl(this, true); | 355 WindowManagerImpl* wm = new WindowManagerImpl(this, true); |
| 358 wm->Bind(window_manager_pipe.Pass()); | 356 wm->Bind(window_manager_pipe.Pass()); |
| 359 // WindowManagerImpl is deleted when the connection has an error, or from our | 357 // WindowManagerImpl is deleted when the connection has an error, or from our |
| 360 // destructor. | 358 // destructor. |
| 361 } | 359 } |
| 362 | 360 |
| 363 } // namespace window_manager | 361 } // namespace window_manager |
| OLD | NEW |