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 <map> | 5 #include <map> |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/macros.h" | 8 #include "base/macros.h" |
9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
10 #include "examples/bitmap_uploader/bitmap_uploader.h" | 10 #include "examples/bitmap_uploader/bitmap_uploader.h" |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
78 | 78 |
79 // This app starts its life via Connect() rather than by being embed, so it does | 79 // This app starts its life via Connect() rather than by being embed, so it does |
80 // not start with a connection to the ViewManager service. It has to obtain a | 80 // not start with a connection to the ViewManager service. It has to obtain a |
81 // connection by connecting to the ViewManagerInit service and asking to be | 81 // connection by connecting to the ViewManagerInit service and asking to be |
82 // embed without a view context. | 82 // embed without a view context. |
83 class WMFlowApp : public mojo::ApplicationDelegate, | 83 class WMFlowApp : public mojo::ApplicationDelegate, |
84 public mojo::ViewManagerDelegate, | 84 public mojo::ViewManagerDelegate, |
85 public mojo::ViewObserver { | 85 public mojo::ViewObserver { |
86 public: | 86 public: |
87 WMFlowApp() : shell_(nullptr), embed_count_(0) {} | 87 WMFlowApp() : shell_(nullptr), embed_count_(0) {} |
88 virtual ~WMFlowApp() { STLDeleteValues(&uploaders_); } | 88 ~WMFlowApp() override { STLDeleteValues(&uploaders_); } |
89 | 89 |
90 private: | 90 private: |
91 typedef std::map<mojo::View*, mojo::BitmapUploader*> ViewToUploader; | 91 typedef std::map<mojo::View*, mojo::BitmapUploader*> ViewToUploader; |
92 | 92 |
93 // Overridden from ApplicationDelegate: | 93 // Overridden from ApplicationDelegate: |
94 virtual void Initialize(mojo::ApplicationImpl* app) override { | 94 void Initialize(mojo::ApplicationImpl* app) override { |
95 shell_ = app->shell(); | 95 shell_ = app->shell(); |
96 view_manager_client_factory_.reset( | 96 view_manager_client_factory_.reset( |
97 new mojo::ViewManagerClientFactory(app->shell(), this)); | 97 new mojo::ViewManagerClientFactory(app->shell(), this)); |
98 view_manager_context_.reset(new mojo::ViewManagerContext(app)); | 98 view_manager_context_.reset(new mojo::ViewManagerContext(app)); |
99 // FIXME: Mojo applications don't know their URLs yet: | 99 // FIXME: Mojo applications don't know their URLs yet: |
100 // https://docs.google.com/a/chromium.org/document/d/1AQ2y6ekzvbdaMF5WrUQmne
yXJnke-MnYYL4Gz1AKDos | 100 // https://docs.google.com/a/chromium.org/document/d/1AQ2y6ekzvbdaMF5WrUQmne
yXJnke-MnYYL4Gz1AKDos |
101 url_ = GURL(app->args()[1]); | 101 url_ = GURL(app->args()[1]); |
102 OpenNewWindow(); | 102 OpenNewWindow(); |
103 OpenNewWindow(); | 103 OpenNewWindow(); |
104 OpenNewWindow(); | 104 OpenNewWindow(); |
105 } | 105 } |
106 virtual bool ConfigureIncomingConnection( | 106 bool ConfigureIncomingConnection( |
107 mojo::ApplicationConnection* connection) override { | 107 mojo::ApplicationConnection* connection) override { |
108 connection->AddService(view_manager_client_factory_.get()); | 108 connection->AddService(view_manager_client_factory_.get()); |
109 return true; | 109 return true; |
110 } | 110 } |
111 | 111 |
112 // Overridden from mojo::ViewManagerDelegate: | 112 // Overridden from mojo::ViewManagerDelegate: |
113 virtual void OnEmbed(mojo::View* root, | 113 void OnEmbed(mojo::View* root, |
114 mojo::InterfaceRequest<mojo::ServiceProvider> services, | 114 mojo::InterfaceRequest<mojo::ServiceProvider> services, |
115 mojo::ServiceProviderPtr exposed_services) override { | 115 mojo::ServiceProviderPtr exposed_services) override { |
116 root->AddObserver(this); | 116 root->AddObserver(this); |
117 mojo::BitmapUploader* uploader = new mojo::BitmapUploader(root); | 117 mojo::BitmapUploader* uploader = new mojo::BitmapUploader(root); |
118 uploaders_[root] = uploader; | 118 uploaders_[root] = uploader; |
119 uploader->Init(shell_); | 119 uploader->Init(shell_); |
120 // BitmapUploader does not track view size changes, we would | 120 // BitmapUploader does not track view size changes, we would |
121 // need to subscribe to OnViewBoundsChanged and tell the bitmap uploader | 121 // need to subscribe to OnViewBoundsChanged and tell the bitmap uploader |
122 // to invalidate itself. This is better done once if had a per-view | 122 // to invalidate itself. This is better done once if had a per-view |
123 // object instead of holding per-view state on the ApplicationDelegate. | 123 // object instead of holding per-view state on the ApplicationDelegate. |
124 uploader->SetColor(kColors[embed_count_++ % arraysize(kColors)]); | 124 uploader->SetColor(kColors[embed_count_++ % arraysize(kColors)]); |
125 | 125 |
(...skipping 15 matching lines...) Expand all Loading... |
141 embedee_exposed_services.Pass()); | 141 embedee_exposed_services.Pass()); |
142 // FIXME: This is wrong. We're storing per-view state on this per-app | 142 // FIXME: This is wrong. We're storing per-view state on this per-app |
143 // delegate. Every time a new view is created embedee_ is replaced | 143 // delegate. Every time a new view is created embedee_ is replaced |
144 // causing the previous one to shut down. This class should not | 144 // causing the previous one to shut down. This class should not |
145 // be a ViewManagerDelegate, but rather a separate object should be | 145 // be a ViewManagerDelegate, but rather a separate object should be |
146 // created for each embedding. | 146 // created for each embedding. |
147 mojo::ConnectToService(imported.get(), &embeddee_); | 147 mojo::ConnectToService(imported.get(), &embeddee_); |
148 embeddee_->HelloBack(base::Bind(&WMFlowApp::HelloBackAck, | 148 embeddee_->HelloBack(base::Bind(&WMFlowApp::HelloBackAck, |
149 base::Unretained(this))); | 149 base::Unretained(this))); |
150 } | 150 } |
151 virtual void OnViewManagerDisconnected( | 151 void OnViewManagerDisconnected(mojo::ViewManager* view_manager) override { |
152 mojo::ViewManager* view_manager) override { | |
153 STLDeleteValues(&uploaders_); | 152 STLDeleteValues(&uploaders_); |
154 } | 153 } |
155 | 154 |
156 // Overridden from mojo::ViewObserver: | 155 // Overridden from mojo::ViewObserver: |
157 virtual void OnViewInputEvent(mojo::View* view, | 156 void OnViewInputEvent(mojo::View* view, |
158 const mojo::EventPtr& event) override { | 157 const mojo::EventPtr& event) override { |
159 if (event->action == mojo::EVENT_TYPE_MOUSE_RELEASED && | 158 if (event->action == mojo::EVENT_TYPE_MOUSE_RELEASED && |
160 event->flags & mojo::EVENT_FLAGS_LEFT_MOUSE_BUTTON) { | 159 event->flags & mojo::EVENT_FLAGS_LEFT_MOUSE_BUTTON) { |
161 OpenNewWindow(); | 160 OpenNewWindow(); |
162 } | 161 } |
163 } | 162 } |
164 virtual void OnViewDestroyed(mojo::View* view) override { | 163 void OnViewDestroyed(mojo::View* view) override { |
165 if (uploaders_.find(view) != uploaders_.end()) { | 164 if (uploaders_.find(view) != uploaders_.end()) { |
166 delete uploaders_[view]; | 165 delete uploaders_[view]; |
167 uploaders_.erase(view); | 166 uploaders_.erase(view); |
168 } | 167 } |
169 --embed_count_; | 168 --embed_count_; |
170 view->RemoveObserver(this); | 169 view->RemoveObserver(this); |
171 } | 170 } |
172 | 171 |
173 void HelloBackAck() { | 172 void HelloBackAck() { |
174 printf("HelloBack() ack'ed\n"); | 173 printf("HelloBack() ack'ed\n"); |
(...skipping 12 matching lines...) Expand all Loading... |
187 | 186 |
188 DISALLOW_COPY_AND_ASSIGN(WMFlowApp); | 187 DISALLOW_COPY_AND_ASSIGN(WMFlowApp); |
189 }; | 188 }; |
190 | 189 |
191 } // namespace examples | 190 } // namespace examples |
192 | 191 |
193 MojoResult MojoMain(MojoHandle shell_handle) { | 192 MojoResult MojoMain(MojoHandle shell_handle) { |
194 mojo::ApplicationRunnerChromium runner(new examples::WMFlowApp); | 193 mojo::ApplicationRunnerChromium runner(new examples::WMFlowApp); |
195 return runner.Run(shell_handle); | 194 return runner.Run(shell_handle); |
196 } | 195 } |
OLD | NEW |