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

Side by Side Diff: components/pdf_viewer/pdf_viewer.cc

Issue 1675083002: Rename ApplicationDelegate to ShellClient (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@delegate
Patch Set: . Created 4 years, 10 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback.h" 10 #include "base/callback.h"
11 #include "base/containers/hash_tables.h" 11 #include "base/containers/hash_tables.h"
12 #include "base/macros.h" 12 #include "base/macros.h"
13 #include "base/memory/scoped_ptr.h" 13 #include "base/memory/scoped_ptr.h"
14 #include "components/bitmap_uploader/bitmap_uploader.h" 14 #include "components/bitmap_uploader/bitmap_uploader.h"
15 #include "components/mus/common/types.h" 15 #include "components/mus/common/types.h"
16 #include "components/mus/public/cpp/input_event_handler.h" 16 #include "components/mus/public/cpp/input_event_handler.h"
17 #include "components/mus/public/cpp/scoped_window_ptr.h" 17 #include "components/mus/public/cpp/scoped_window_ptr.h"
18 #include "components/mus/public/cpp/window.h" 18 #include "components/mus/public/cpp/window.h"
19 #include "components/mus/public/cpp/window_observer.h" 19 #include "components/mus/public/cpp/window_observer.h"
20 #include "components/mus/public/cpp/window_tree_connection.h" 20 #include "components/mus/public/cpp/window_tree_connection.h"
21 #include "components/mus/public/cpp/window_tree_delegate.h" 21 #include "components/mus/public/cpp/window_tree_delegate.h"
22 #include "components/mus/public/interfaces/input_events.mojom.h" 22 #include "components/mus/public/interfaces/input_events.mojom.h"
23 #include "components/mus/public/interfaces/input_key_codes.mojom.h" 23 #include "components/mus/public/interfaces/input_key_codes.mojom.h"
24 #include "components/web_view/public/interfaces/frame.mojom.h" 24 #include "components/web_view/public/interfaces/frame.mojom.h"
25 #include "mojo/common/data_pipe_utils.h" 25 #include "mojo/common/data_pipe_utils.h"
26 #include "mojo/public/c/system/main.h" 26 #include "mojo/public/c/system/main.h"
27 #include "mojo/public/cpp/bindings/binding.h" 27 #include "mojo/public/cpp/bindings/binding.h"
28 #include "mojo/public/cpp/bindings/strong_binding.h"
28 #include "mojo/services/tracing/public/cpp/tracing_impl.h" 29 #include "mojo/services/tracing/public/cpp/tracing_impl.h"
29 #include "mojo/shell/public/cpp/application_connection.h"
30 #include "mojo/shell/public/cpp/application_delegate.h"
31 #include "mojo/shell/public/cpp/application_impl.h" 30 #include "mojo/shell/public/cpp/application_impl.h"
32 #include "mojo/shell/public/cpp/application_runner.h" 31 #include "mojo/shell/public/cpp/application_runner.h"
33 #include "mojo/shell/public/cpp/connect.h"
34 #include "mojo/shell/public/cpp/interface_factory_impl.h" 32 #include "mojo/shell/public/cpp/interface_factory_impl.h"
35 #include "mojo/shell/public/cpp/service_provider_impl.h" 33 #include "mojo/shell/public/cpp/shell_client.h"
36 #include "mojo/shell/public/interfaces/content_handler.mojom.h" 34 #include "mojo/shell/public/interfaces/content_handler.mojom.h"
37 #include "mojo/shell/public/interfaces/shell.mojom.h" 35 #include "mojo/shell/public/interfaces/shell.mojom.h"
38 #include "third_party/pdfium/public/fpdf_ext.h" 36 #include "third_party/pdfium/public/fpdf_ext.h"
39 #include "third_party/pdfium/public/fpdfview.h" 37 #include "third_party/pdfium/public/fpdfview.h"
40 #include "ui/gfx/geometry/rect.h" 38 #include "ui/gfx/geometry/rect.h"
41 #include "v8/include/v8.h" 39 #include "v8/include/v8.h"
42 40
43 const uint32_t g_background_color = 0xFF888888; 41 const uint32_t g_background_color = 0xFF888888;
44 42
45 namespace pdf_viewer { 43 namespace pdf_viewer {
46 namespace { 44 namespace {
47 45
48 // Responsible for managing a particlar view displaying a PDF document. 46 // Responsible for managing a particlar view displaying a PDF document.
49 class PDFView : public mus::WindowTreeDelegate, 47 class PDFView : public mus::WindowTreeDelegate,
50 public mus::WindowObserver, 48 public mus::WindowObserver,
51 public mus::InputEventHandler, 49 public mus::InputEventHandler,
52 public web_view::mojom::FrameClient, 50 public web_view::mojom::FrameClient,
53 public mojo::InterfaceFactory<web_view::mojom::FrameClient> { 51 public mojo::InterfaceFactory<web_view::mojom::FrameClient> {
54 public: 52 public:
55 using DeleteCallback = base::Callback<void(PDFView*)>; 53 using DeleteCallback = base::Callback<void(PDFView*)>;
56 54
57 PDFView(mojo::Shell* shell, 55 PDFView(mojo::Shell* shell,
58 mojo::ApplicationConnection* connection, 56 mojo::Connection* connection,
59 FPDF_DOCUMENT doc, 57 FPDF_DOCUMENT doc,
60 const DeleteCallback& delete_callback) 58 const DeleteCallback& delete_callback)
61 : app_ref_(shell->CreateAppRefCount()), 59 : app_ref_(shell->CreateAppRefCount()),
62 doc_(doc), 60 doc_(doc),
63 current_page_(0), 61 current_page_(0),
64 page_count_(FPDF_GetPageCount(doc_)), 62 page_count_(FPDF_GetPageCount(doc_)),
65 shell_(shell), 63 shell_(shell),
66 root_(nullptr), 64 root_(nullptr),
67 frame_client_binding_(this), 65 frame_client_binding_(this),
68 delete_callback_(delete_callback) { 66 delete_callback_(delete_callback) {
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 void HighlightFindResults(int32_t request_id, 207 void HighlightFindResults(int32_t request_id,
210 const mojo::String& search_test, 208 const mojo::String& search_test,
211 web_view::mojom::FindOptionsPtr options, 209 web_view::mojom::FindOptionsPtr options,
212 bool reset) override { 210 bool reset) override {
213 NOTIMPLEMENTED(); 211 NOTIMPLEMENTED();
214 } 212 }
215 void StopHighlightingFindResults() override {} 213 void StopHighlightingFindResults() override {}
216 214
217 // mojo::InterfaceFactory<web_view::mojom::FrameClient>: 215 // mojo::InterfaceFactory<web_view::mojom::FrameClient>:
218 void Create( 216 void Create(
219 mojo::ApplicationConnection* connection, 217 mojo::Connection* connection,
220 mojo::InterfaceRequest<web_view::mojom::FrameClient> request) override { 218 mojo::InterfaceRequest<web_view::mojom::FrameClient> request) override {
221 frame_client_binding_.Bind(std::move(request)); 219 frame_client_binding_.Bind(std::move(request));
222 } 220 }
223 221
224 scoped_ptr<mojo::AppRefCount> app_ref_; 222 scoped_ptr<mojo::AppRefCount> app_ref_;
225 FPDF_DOCUMENT doc_; 223 FPDF_DOCUMENT doc_;
226 int current_page_; 224 int current_page_;
227 int page_count_; 225 int page_count_;
228 226
229 scoped_ptr<bitmap_uploader::BitmapUploader> bitmap_uploader_; 227 scoped_ptr<bitmap_uploader::BitmapUploader> bitmap_uploader_;
230 228
231 mojo::Shell* shell_; 229 mojo::Shell* shell_;
232 mus::Window* root_; 230 mus::Window* root_;
233 231
234 web_view::mojom::FramePtr frame_; 232 web_view::mojom::FramePtr frame_;
235 mojo::Binding<web_view::mojom::FrameClient> frame_client_binding_; 233 mojo::Binding<web_view::mojom::FrameClient> frame_client_binding_;
236 DeleteCallback delete_callback_; 234 DeleteCallback delete_callback_;
237 235
238 DISALLOW_COPY_AND_ASSIGN(PDFView); 236 DISALLOW_COPY_AND_ASSIGN(PDFView);
239 }; 237 };
240 238
241 // Responsible for managing all the views for displaying a PDF document. 239 // Responsible for managing all the views for displaying a PDF document.
242 class PDFViewerApplicationDelegate 240 class PDFViewerApplicationDelegate
243 : public mojo::ApplicationDelegate, 241 : public mojo::ShellClient,
244 public mojo::InterfaceFactory<mus::mojom::WindowTreeClient> { 242 public mojo::InterfaceFactory<mus::mojom::WindowTreeClient> {
245 public: 243 public:
246 PDFViewerApplicationDelegate( 244 PDFViewerApplicationDelegate(
247 mojo::ApplicationRequest request, 245 mojo::ApplicationRequest request,
248 mojo::URLResponsePtr response, 246 mojo::URLResponsePtr response,
249 const mojo::Callback<void()>& destruct_callback) 247 const mojo::Callback<void()>& destruct_callback)
250 : app_(this, 248 : app_(this,
251 std::move(request), 249 std::move(request),
252 base::Bind(&PDFViewerApplicationDelegate::OnTerminate, 250 base::Bind(&PDFViewerApplicationDelegate::OnTerminate,
253 base::Unretained(this))), 251 base::Unretained(this))),
(...skipping 16 matching lines...) Expand all
270 void FetchPDF(mojo::URLResponsePtr response) { 268 void FetchPDF(mojo::URLResponsePtr response) {
271 data_.clear(); 269 data_.clear();
272 mojo::common::BlockingCopyToString(std::move(response->body), &data_); 270 mojo::common::BlockingCopyToString(std::move(response->body), &data_);
273 if (data_.length() >= static_cast<size_t>(std::numeric_limits<int>::max())) 271 if (data_.length() >= static_cast<size_t>(std::numeric_limits<int>::max()))
274 return; 272 return;
275 doc_ = FPDF_LoadMemDocument(data_.data(), static_cast<int>(data_.length()), 273 doc_ = FPDF_LoadMemDocument(data_.data(), static_cast<int>(data_.length()),
276 nullptr); 274 nullptr);
277 } 275 }
278 276
279 // Callback from the quit closure. We key off this rather than 277 // Callback from the quit closure. We key off this rather than
280 // ApplicationDelegate::Quit() as we don't want to shut down the messageloop 278 // ShellClient::Quit() as we don't want to shut down the messageloop
281 // when we quit (the messageloop is shared among multiple PDFViews). 279 // when we quit (the messageloop is shared among multiple PDFViews).
282 void OnTerminate() { delete this; } 280 void OnTerminate() { delete this; }
283 281
284 void OnPDFViewDestroyed(PDFView* pdf_view) { 282 void OnPDFViewDestroyed(PDFView* pdf_view) {
285 DCHECK(std::find(pdf_views_.begin(), pdf_views_.end(), pdf_view) != 283 DCHECK(std::find(pdf_views_.begin(), pdf_views_.end(), pdf_view) !=
286 pdf_views_.end()); 284 pdf_views_.end());
287 pdf_views_.erase(std::find(pdf_views_.begin(), pdf_views_.end(), pdf_view)); 285 pdf_views_.erase(std::find(pdf_views_.begin(), pdf_views_.end(), pdf_view));
288 } 286 }
289 287
290 // ApplicationDelegate: 288 // mojo::ShellClient:
291 bool AcceptConnection( 289 bool AcceptConnection(mojo::Connection* connection) override {
292 mojo::ApplicationConnection* connection) override {
293 connection->AddService<mus::mojom::WindowTreeClient>(this); 290 connection->AddService<mus::mojom::WindowTreeClient>(this);
294 return true; 291 return true;
295 } 292 }
296 293
297 // mojo::InterfaceFactory<mus::mojom::WindowTreeClient>: 294 // mojo::InterfaceFactory<mus::mojom::WindowTreeClient>:
298 void Create( 295 void Create(
299 mojo::ApplicationConnection* connection, 296 mojo::Connection* connection,
300 mojo::InterfaceRequest<mus::mojom::WindowTreeClient> request) override { 297 mojo::InterfaceRequest<mus::mojom::WindowTreeClient> request) override {
301 PDFView* pdf_view = new PDFView( 298 PDFView* pdf_view = new PDFView(
302 &app_, connection, doc_, 299 &app_, connection, doc_,
303 base::Bind(&PDFViewerApplicationDelegate::OnPDFViewDestroyed, 300 base::Bind(&PDFViewerApplicationDelegate::OnPDFViewDestroyed,
304 base::Unretained(this))); 301 base::Unretained(this)));
305 pdf_views_.push_back(pdf_view); 302 pdf_views_.push_back(pdf_view);
306 mus::WindowTreeConnection::Create( 303 mus::WindowTreeConnection::Create(
307 pdf_view, std::move(request), 304 pdf_view, std::move(request),
308 mus::WindowTreeConnection::CreateType::DONT_WAIT_FOR_EMBED); 305 mus::WindowTreeConnection::CreateType::DONT_WAIT_FOR_EMBED);
309 } 306 }
(...skipping 24 matching lines...) Expand all
334 new PDFViewerApplicationDelegate(std::move(request), std::move(response), 331 new PDFViewerApplicationDelegate(std::move(request), std::move(response),
335 destruct_callback); 332 destruct_callback);
336 } 333 }
337 334
338 mojo::StrongBinding<mojo::shell::mojom::ContentHandler> binding_; 335 mojo::StrongBinding<mojo::shell::mojom::ContentHandler> binding_;
339 336
340 DISALLOW_COPY_AND_ASSIGN(ContentHandlerImpl); 337 DISALLOW_COPY_AND_ASSIGN(ContentHandlerImpl);
341 }; 338 };
342 339
343 class PDFViewer 340 class PDFViewer
344 : public mojo::ApplicationDelegate, 341 : public mojo::ShellClient,
345 public mojo::InterfaceFactory<mojo::shell::mojom::ContentHandler> { 342 public mojo::InterfaceFactory<mojo::shell::mojom::ContentHandler> {
346 public: 343 public:
347 PDFViewer() { 344 PDFViewer() {
348 v8::V8::InitializeICU(); 345 v8::V8::InitializeICU();
349 FPDF_InitLibrary(); 346 FPDF_InitLibrary();
350 } 347 }
351 348
352 ~PDFViewer() override { FPDF_DestroyLibrary(); } 349 ~PDFViewer() override { FPDF_DestroyLibrary(); }
353 350
354 private: 351 private:
355 // ApplicationDelegate: 352 // mojo::ShellClient:
356 void Initialize(mojo::Shell* shell, const std::string& url, 353 void Initialize(mojo::Shell* shell, const std::string& url,
357 uint32_t id) override { 354 uint32_t id) override {
358 tracing_.Initialize(shell, url); 355 tracing_.Initialize(shell, url);
359 } 356 }
360 357
361 bool AcceptConnection( 358 bool AcceptConnection(mojo::Connection* connection) override {
362 mojo::ApplicationConnection* connection) override {
363 connection->AddService(this); 359 connection->AddService(this);
364 return true; 360 return true;
365 } 361 }
366 362
367 // InterfaceFactory<ContentHandler>: 363 // InterfaceFactory<ContentHandler>:
368 void Create(mojo::ApplicationConnection* connection, 364 void Create(mojo::Connection* connection,
369 mojo::InterfaceRequest<mojo::shell::mojom::ContentHandler> 365 mojo::InterfaceRequest<mojo::shell::mojom::ContentHandler>
370 request) override { 366 request) override {
371 new ContentHandlerImpl(std::move(request)); 367 new ContentHandlerImpl(std::move(request));
372 } 368 }
373 369
374 mojo::TracingImpl tracing_; 370 mojo::TracingImpl tracing_;
375 371
376 DISALLOW_COPY_AND_ASSIGN(PDFViewer); 372 DISALLOW_COPY_AND_ASSIGN(PDFViewer);
377 }; 373 };
378 } // namespace 374 } // namespace
379 } // namespace pdf_viewer 375 } // namespace pdf_viewer
380 376
381 MojoResult MojoMain(MojoHandle application_request) { 377 MojoResult MojoMain(MojoHandle application_request) {
382 mojo::ApplicationRunner runner(new pdf_viewer::PDFViewer()); 378 mojo::ApplicationRunner runner(new pdf_viewer::PDFViewer());
383 return runner.Run(application_request); 379 return runner.Run(application_request);
384 } 380 }
OLDNEW
« no previous file with comments | « components/mus/ws/window_tree_apptest.cc ('k') | components/resource_provider/resource_provider_app.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698