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

Side by Side Diff: mojo/shell/package_test_package.cc

Issue 1706833003: Move various Shell tests into a subdir. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@conn
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
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <stddef.h>
6 #include <stdint.h>
7
8 #include <utility>
9
10 #include "base/bind.h"
11 #include "base/macros.h"
12 #include "base/run_loop.h"
13 #include "base/threading/simple_thread.h"
14 #include "mojo/public/c/system/main.h"
15 #include "mojo/public/cpp/bindings/weak_binding_set.h"
16 #include "mojo/shell/package_test.mojom.h"
17 #include "mojo/shell/public/cpp/application_runner.h"
18 #include "mojo/shell/public/cpp/interface_factory.h"
19 #include "mojo/shell/public/cpp/shell.h"
20 #include "mojo/shell/public/cpp/shell_client.h"
21 #include "mojo/shell/public/interfaces/shell_client_factory.mojom.h"
22
23 // Tests that multiple applications can be packaged in a single Mojo application
24 // implementing ShellClientFactory; that these applications can be specified by
25 // the package's manifest and are thus registered with the PackageManager.
26
27 namespace mojo {
28 namespace shell {
29
30 using GetNameCallback = test::mojom::PackageTestService::GetNameCallback;
31
32 class ProvidedShellClient
33 : public ShellClient,
34 public InterfaceFactory<test::mojom::PackageTestService>,
35 public test::mojom::PackageTestService,
36 public base::SimpleThread {
37 public:
38 ProvidedShellClient(const std::string& name,
39 mojom::ShellClientRequest request)
40 : base::SimpleThread(name),
41 name_(name),
42 request_(std::move(request)),
43 shell_(nullptr) {
44 Start();
45 }
46 ~ProvidedShellClient() override {
47 Join();
48 }
49
50 private:
51 // mojo::ShellClient:
52 void Initialize(Shell* shell, const std::string& url, uint32_t id) override {
53 shell_ = shell;
54 bindings_.set_connection_error_handler(
55 base::Bind(&ProvidedShellClient::OnConnectionError,
56 base::Unretained(this)));
57 }
58 bool AcceptConnection(Connection* connection) override {
59 connection->AddInterface<test::mojom::PackageTestService>(
60 this);
61 return true;
62 }
63
64 // InterfaceFactory<test::mojom::PackageTestService>:
65 void Create(Connection* connection,
66 test::mojom::PackageTestServiceRequest request) override {
67 bindings_.AddBinding(this, std::move(request));
68 }
69
70 // test::mojom::PackageTestService:
71 void GetName(const GetNameCallback& callback) override {
72 callback.Run(name_);
73 }
74
75 // base::SimpleThread:
76 void Run() override {
77 ApplicationRunner(this).Run(request_.PassMessagePipe().release().value(),
78 false);
79 delete this;
80 }
81
82 void OnConnectionError() {
83 if (bindings_.empty())
84 shell_->Quit();
85 }
86
87 const std::string name_;
88 mojom::ShellClientRequest request_;
89 Shell* shell_;
90 WeakBindingSet<test::mojom::PackageTestService> bindings_;
91
92 DISALLOW_COPY_AND_ASSIGN(ProvidedShellClient);
93 };
94
95 class PackageTestShellClient
96 : public ShellClient,
97 public InterfaceFactory<mojom::ShellClientFactory>,
98 public InterfaceFactory<test::mojom::PackageTestService>,
99 public mojom::ShellClientFactory,
100 public test::mojom::PackageTestService {
101 public:
102 PackageTestShellClient() : shell_(nullptr) {}
103 ~PackageTestShellClient() override {}
104
105 private:
106 // mojo::ShellClient:
107 void Initialize(Shell* shell, const std::string& url, uint32_t id) override {
108 shell_ = shell;
109 bindings_.set_connection_error_handler(
110 base::Bind(&PackageTestShellClient::OnConnectionError,
111 base::Unretained(this)));
112 }
113 bool AcceptConnection(Connection* connection) override {
114 connection->AddInterface<ShellClientFactory>(this);
115 connection->AddInterface<test::mojom::PackageTestService>(this);
116 return true;
117 }
118
119 // InterfaceFactory<mojom::ShellClientFactory>:
120 void Create(Connection* connection,
121 mojom::ShellClientFactoryRequest request) override {
122 shell_client_factory_bindings_.AddBinding(this, std::move(request));
123 }
124
125 // InterfaceFactory<test::mojom::PackageTestService>:
126 void Create(Connection* connection,
127 test::mojom::PackageTestServiceRequest request) override {
128 bindings_.AddBinding(this, std::move(request));
129 }
130
131 // mojom::ShellClientFactory:
132 void CreateShellClient(mojom::ShellClientRequest request,
133 const String& url) override {
134 if (url == "mojo://package_test_a/")
135 new ProvidedShellClient("A", std::move(request));
136 else if (url == "mojo://package_test_b/")
137 new ProvidedShellClient("B", std::move(request));
138 }
139
140 // test::mojom::PackageTestService:
141 void GetName(const GetNameCallback& callback) override {
142 callback.Run("ROOT");
143 }
144
145 void OnConnectionError() {
146 if (bindings_.empty())
147 shell_->Quit();
148 }
149
150 Shell* shell_;
151 std::vector<scoped_ptr<ShellClient>> delegates_;
152 WeakBindingSet<mojom::ShellClientFactory> shell_client_factory_bindings_;
153 WeakBindingSet<test::mojom::PackageTestService> bindings_;
154
155 DISALLOW_COPY_AND_ASSIGN(PackageTestShellClient);
156 };
157
158 } // namespace shell
159 } // namespace mojo
160
161
162 MojoResult MojoMain(MojoHandle shell_handle) {
163 MojoResult rv = mojo::ApplicationRunner(
164 new mojo::shell::PackageTestShellClient).Run(shell_handle);
165 return rv;
166 }
OLDNEW
« no previous file with comments | « mojo/shell/package_test_app_b_manifest.json ('k') | mojo/shell/package_test_package_manifest.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698