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

Side by Side Diff: mojo/examples/window_manager/window_manager.cc

Issue 380413003: Mojo: Use InterfaceFactory<Interface> for service registration (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review feedback Created 6 years, 5 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
OLDNEW
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 "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/bind.h" 6 #include "base/bind.h"
7 #include "mojo/examples/keyboard/keyboard.mojom.h" 7 #include "mojo/examples/keyboard/keyboard.mojom.h"
8 #include "mojo/examples/window_manager/debug_panel.h" 8 #include "mojo/examples/window_manager/debug_panel.h"
9 #include "mojo/examples/window_manager/window_manager.mojom.h" 9 #include "mojo/examples/window_manager/window_manager.mojom.h"
10 #include "mojo/public/cpp/application/application_connection.h" 10 #include "mojo/public/cpp/application/application_connection.h"
11 #include "mojo/public/cpp/application/application_delegate.h" 11 #include "mojo/public/cpp/application/application_delegate.h"
12 #include "mojo/public/cpp/application/application_impl.h" 12 #include "mojo/public/cpp/application/application_impl.h"
13 #include "mojo/public/cpp/application/interface_factory_with_context.h"
13 #include "mojo/services/public/cpp/geometry/geometry_type_converters.h" 14 #include "mojo/services/public/cpp/geometry/geometry_type_converters.h"
14 #include "mojo/services/public/cpp/input_events/input_events_type_converters.h" 15 #include "mojo/services/public/cpp/input_events/input_events_type_converters.h"
15 #include "mojo/services/public/cpp/view_manager/node.h" 16 #include "mojo/services/public/cpp/view_manager/node.h"
16 #include "mojo/services/public/cpp/view_manager/node_observer.h" 17 #include "mojo/services/public/cpp/view_manager/node_observer.h"
17 #include "mojo/services/public/cpp/view_manager/view.h" 18 #include "mojo/services/public/cpp/view_manager/view.h"
18 #include "mojo/services/public/cpp/view_manager/view_event_dispatcher.h" 19 #include "mojo/services/public/cpp/view_manager/view_event_dispatcher.h"
19 #include "mojo/services/public/cpp/view_manager/view_manager.h" 20 #include "mojo/services/public/cpp/view_manager/view_manager.h"
21 #include "mojo/services/public/cpp/view_manager/view_manager_client_factory.h"
20 #include "mojo/services/public/cpp/view_manager/view_manager_delegate.h" 22 #include "mojo/services/public/cpp/view_manager/view_manager_delegate.h"
21 #include "mojo/services/public/interfaces/input_events/input_events.mojom.h" 23 #include "mojo/services/public/interfaces/input_events/input_events.mojom.h"
22 #include "mojo/services/public/interfaces/launcher/launcher.mojom.h" 24 #include "mojo/services/public/interfaces/launcher/launcher.mojom.h"
23 #include "mojo/services/public/interfaces/navigation/navigation.mojom.h" 25 #include "mojo/services/public/interfaces/navigation/navigation.mojom.h"
24 #include "mojo/views/views_init.h" 26 #include "mojo/views/views_init.h"
25 #include "ui/events/event.h" 27 #include "ui/events/event.h"
26 #include "ui/events/event_constants.h" 28 #include "ui/events/event_constants.h"
27 29
28 #if defined CreateWindow 30 #if defined CreateWindow
29 #undef CreateWindow 31 #undef CreateWindow
30 #endif 32 #endif
31 33
32 using mojo::view_manager::Id; 34 using mojo::view_manager::Id;
33 using mojo::view_manager::Node; 35 using mojo::view_manager::Node;
34 using mojo::view_manager::NodeObserver; 36 using mojo::view_manager::NodeObserver;
35 using mojo::view_manager::View; 37 using mojo::view_manager::View;
36 using mojo::view_manager::ViewEventDispatcher; 38 using mojo::view_manager::ViewEventDispatcher;
37 using mojo::view_manager::ViewManager; 39 using mojo::view_manager::ViewManager;
40 using mojo::view_manager::ViewManagerClientFactory;
38 using mojo::view_manager::ViewManagerDelegate; 41 using mojo::view_manager::ViewManagerDelegate;
39 using mojo::view_manager::ViewObserver; 42 using mojo::view_manager::ViewObserver;
40 43
41 namespace mojo { 44 namespace mojo {
42 namespace examples { 45 namespace examples {
43 46
44 class WindowManager; 47 class WindowManager;
45 48
46 namespace { 49 namespace {
47 50
48 const int kBorderInset = 25; 51 const int kBorderInset = 25;
49 const int kControlPanelWidth = 200; 52 const int kControlPanelWidth = 200;
50 const int kTextfieldHeight = 25; 53 const int kTextfieldHeight = 25;
51 54
52 } // namespace 55 } // namespace
53 56
54 class WindowManagerConnection : public InterfaceImpl<IWindowManager> { 57 class WindowManagerConnection : public InterfaceImpl<IWindowManager> {
55 public: 58 public:
56 explicit WindowManagerConnection(ApplicationConnection* connection, 59 explicit WindowManagerConnection(WindowManager* window_manager)
57 WindowManager* window_manager)
58 : window_manager_(window_manager) {} 60 : window_manager_(window_manager) {}
59 virtual ~WindowManagerConnection() {} 61 virtual ~WindowManagerConnection() {}
60 62
61 private: 63 private:
62 // Overridden from IWindowManager: 64 // Overridden from IWindowManager:
63 virtual void CloseWindow(Id node_id) OVERRIDE; 65 virtual void CloseWindow(Id node_id) OVERRIDE;
64 virtual void ShowKeyboard(Id view_id, RectPtr bounds) OVERRIDE; 66 virtual void ShowKeyboard(Id view_id, RectPtr bounds) OVERRIDE;
65 virtual void HideKeyboard(Id view_id) OVERRIDE; 67 virtual void HideKeyboard(Id view_id) OVERRIDE;
66 68
67 WindowManager* window_manager_; 69 WindowManager* window_manager_;
68 70
69 DISALLOW_COPY_AND_ASSIGN(WindowManagerConnection); 71 DISALLOW_COPY_AND_ASSIGN(WindowManagerConnection);
70 }; 72 };
71 73
72 class NavigatorHost : public InterfaceImpl<navigation::NavigatorHost> { 74 class NavigatorHost : public InterfaceImpl<navigation::NavigatorHost> {
73 public: 75 public:
74 explicit NavigatorHost(ApplicationConnection* connection, 76 explicit NavigatorHost(WindowManager* window_manager)
75 WindowManager* window_manager) 77 : window_manager_(window_manager) {}
76 : window_manager_(window_manager) {
77 }
78 virtual ~NavigatorHost() { 78 virtual ~NavigatorHost() {
79 } 79 }
80 80
81 private: 81 private:
82 virtual void DidNavigateLocally(uint32 source_node_id, 82 virtual void DidNavigateLocally(uint32 source_node_id,
83 const mojo::String& url) OVERRIDE; 83 const mojo::String& url) OVERRIDE;
84 virtual void RequestNavigate( 84 virtual void RequestNavigate(
85 uint32 source_node_id, 85 uint32 source_node_id,
86 navigation::Target target, 86 navigation::Target target,
87 navigation::NavigationDetailsPtr nav_details) OVERRIDE; 87 navigation::NavigationDetailsPtr nav_details) OVERRIDE;
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 // TODO(hansmuller): Do Layout 179 // TODO(hansmuller): Do Layout
180 } 180 }
181 181
182 Node* root_; 182 Node* root_;
183 ViewManager* view_manager_; 183 ViewManager* view_manager_;
184 Id content_node_id_; 184 Id content_node_id_;
185 185
186 DISALLOW_COPY_AND_ASSIGN(RootLayoutManager); 186 DISALLOW_COPY_AND_ASSIGN(RootLayoutManager);
187 }; 187 };
188 188
189 class WindowManager : public ApplicationDelegate, 189 class WindowManager
190 public DebugPanel::Delegate, 190 : public ApplicationDelegate,
191 public ViewManagerDelegate, 191 public DebugPanel::Delegate,
192 public ViewEventDispatcher { 192 public ViewManagerDelegate,
193 public ViewEventDispatcher,
194 public InterfaceFactoryWithContext<WindowManagerConnection,
195 WindowManager>,
196 public InterfaceFactoryWithContext<NavigatorHost, WindowManager> {
193 public: 197 public:
194 WindowManager() 198 WindowManager()
195 : launcher_ui_(NULL), 199 : InterfaceFactoryWithContext<WindowManagerConnection, WindowManager>(
200 this),
201 InterfaceFactoryWithContext<NavigatorHost, WindowManager>(this),
202 launcher_ui_(NULL),
196 view_manager_(NULL), 203 view_manager_(NULL),
197 app_(NULL) { 204 view_manager_client_factory_(this),
198 } 205 app_(NULL) {}
199 206
200 virtual ~WindowManager() {} 207 virtual ~WindowManager() {}
201 208
202 void CloseWindow(Id node_id) { 209 void CloseWindow(Id node_id) {
203 Node* node = view_manager_->GetNodeById(node_id); 210 Node* node = view_manager_->GetNodeById(node_id);
204 DCHECK(node); 211 DCHECK(node);
205 std::vector<Node*>::iterator iter = 212 std::vector<Node*>::iterator iter =
206 std::find(windows_.begin(), windows_.end(), node); 213 std::find(windows_.begin(), windows_.end(), node);
207 DCHECK(iter != windows_.end()); 214 DCHECK(iter != windows_.end());
208 windows_.erase(iter); 215 windows_.erase(iter);
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 private: 266 private:
260 // Overridden from ApplicationDelegate: 267 // Overridden from ApplicationDelegate:
261 virtual void Initialize(ApplicationImpl* app) MOJO_OVERRIDE { 268 virtual void Initialize(ApplicationImpl* app) MOJO_OVERRIDE {
262 app_ = app; 269 app_ = app;
263 app->ConnectToService("mojo:mojo_launcher", &launcher_); 270 app->ConnectToService("mojo:mojo_launcher", &launcher_);
264 views_init_.reset(new ViewsInit); 271 views_init_.reset(new ViewsInit);
265 } 272 }
266 273
267 virtual bool ConfigureIncomingConnection(ApplicationConnection* connection) 274 virtual bool ConfigureIncomingConnection(ApplicationConnection* connection)
268 MOJO_OVERRIDE { 275 MOJO_OVERRIDE {
269 connection->AddService<WindowManagerConnection>(this); 276 connection->AddServiceFactory<IWindowManager>(this);
270 connection->AddService<NavigatorHost>(this); 277 connection->AddServiceFactory<navigation::NavigatorHost>(this);
271 ViewManager::ConfigureIncomingConnection(connection, this); 278 connection->AddServiceFactory(&view_manager_client_factory_);
272 return true; 279 return true;
273 } 280 }
274 281
275 // Overridden from ViewManagerDelegate: 282 // Overridden from ViewManagerDelegate:
276 virtual void OnRootAdded(ViewManager* view_manager, Node* root) OVERRIDE { 283 virtual void OnRootAdded(ViewManager* view_manager, Node* root) OVERRIDE {
277 DCHECK(!view_manager_); 284 DCHECK(!view_manager_);
278 view_manager_ = view_manager; 285 view_manager_ = view_manager;
279 view_manager_->SetEventDispatcher(this); 286 view_manager_->SetEventDispatcher(this);
280 287
281 Node* node = Node::Create(view_manager_); 288 Node* node = Node::Create(view_manager_);
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
425 432
426 debug_panel_ = new DebugPanel(this, node); 433 debug_panel_ = new DebugPanel(this, node);
427 } 434 }
428 435
429 scoped_ptr<ViewsInit> views_init_; 436 scoped_ptr<ViewsInit> views_init_;
430 DebugPanel* debug_panel_; 437 DebugPanel* debug_panel_;
431 launcher::LauncherPtr launcher_; 438 launcher::LauncherPtr launcher_;
432 Node* launcher_ui_; 439 Node* launcher_ui_;
433 std::vector<Node*> windows_; 440 std::vector<Node*> windows_;
434 ViewManager* view_manager_; 441 ViewManager* view_manager_;
442 ViewManagerClientFactory view_manager_client_factory_;
435 scoped_ptr<RootLayoutManager> root_layout_manager_; 443 scoped_ptr<RootLayoutManager> root_layout_manager_;
436 444
437 // Id of the node most content is added to. The keyboard is NOT added here. 445 // Id of the node most content is added to. The keyboard is NOT added here.
438 Id content_node_id_; 446 Id content_node_id_;
439 447
440 scoped_ptr<KeyboardManager> keyboard_manager_; 448 scoped_ptr<KeyboardManager> keyboard_manager_;
441 ApplicationImpl* app_; 449 ApplicationImpl* app_;
442 450
443 DISALLOW_COPY_AND_ASSIGN(WindowManager); 451 DISALLOW_COPY_AND_ASSIGN(WindowManager);
444 }; 452 };
(...skipping 23 matching lines...) Expand all
468 } 476 }
469 477
470 } // namespace examples 478 } // namespace examples
471 479
472 // static 480 // static
473 ApplicationDelegate* ApplicationDelegate::Create() { 481 ApplicationDelegate* ApplicationDelegate::Create() {
474 return new examples::WindowManager; 482 return new examples::WindowManager;
475 } 483 }
476 484
477 } // namespace mojo 485 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698