blob: fe49993a8ef6844b1e44a1424a2359a403e6a52c [file] [log] [blame]
Aaron Boodmanb34bcbf2015-03-02 10:05:31 -08001// Copyright 2015 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 "mojo/public/c/system/main.h"
6#include "mojo/public/cpp/application/application_delegate.h"
7#include "mojo/public/cpp/application/application_impl.h"
8#include "mojo/public/cpp/application/application_runner.h"
9#include "mojo/public/cpp/application/interface_factory.h"
10#include "mojo/public/cpp/bindings/callback.h"
11#include "mojo/public/cpp/bindings/interface_request.h"
12#include "mojo/public/cpp/bindings/strong_binding.h"
13#include "shell/test/pingable.mojom.h"
14
Viet-Trung Luue377a9e2015-04-09 13:53:21 -070015using mojo::String;
16
Aaron Boodmanb34bcbf2015-03-02 10:05:31 -080017class PingableImpl : public Pingable {
18 public:
Viet-Trung Luubd07e3a2015-04-09 12:43:29 -070019 PingableImpl(mojo::InterfaceRequest<Pingable> request,
Aaron Boodmanb34bcbf2015-03-02 10:05:31 -080020 const std::string& app_url,
21 const std::string& connection_url)
22 : binding_(this, request.Pass()),
23 app_url_(app_url),
24 connection_url_(connection_url) {}
25
26 ~PingableImpl() override {}
27
28 private:
Viet-Trung Luubd07e3a2015-04-09 12:43:29 -070029 void Ping(
Viet-Trung Luue377a9e2015-04-09 13:53:21 -070030 const String& message,
31 const mojo::Callback<void(String, String, String)>& callback) override {
Aaron Boodmanb34bcbf2015-03-02 10:05:31 -080032 callback.Run(app_url_, connection_url_, message);
33 }
34
Viet-Trung Luubd07e3a2015-04-09 12:43:29 -070035 mojo::StrongBinding<Pingable> binding_;
Aaron Boodmanb34bcbf2015-03-02 10:05:31 -080036 std::string app_url_;
37 std::string connection_url_;
38};
39
40class PingableApp : public mojo::ApplicationDelegate,
41 public mojo::InterfaceFactory<Pingable> {
42 public:
43 PingableApp() {}
Dave Moorecc0e4f92015-03-10 15:23:04 -070044 ~PingableApp() override {}
Aaron Boodmanb34bcbf2015-03-02 10:05:31 -080045
46 private:
47 // ApplicationDelegate:
Viet-Trung Luubd07e3a2015-04-09 12:43:29 -070048 void Initialize(mojo::ApplicationImpl* impl) override {
49 app_url_ = impl->url();
50 }
Aaron Boodmanb34bcbf2015-03-02 10:05:31 -080051
52 bool ConfigureIncomingConnection(
53 mojo::ApplicationConnection* connection) override {
54 connection->AddService(this);
55 return true;
56 }
57
58 // InterfaceFactory<Pingable>:
59 void Create(mojo::ApplicationConnection* connection,
60 mojo::InterfaceRequest<Pingable> request) override {
61 new PingableImpl(request.Pass(), app_url_, connection->GetConnectionURL());
62 }
63
64 std::string app_url_;
65};
66
Mitch Rudominer963aa772015-04-03 08:22:46 -070067MojoResult MojoMain(MojoHandle application_request) {
Viet-Trung Luubd07e3a2015-04-09 12:43:29 -070068 mojo::ApplicationRunner runner(new PingableApp);
Mitch Rudominer963aa772015-04-03 08:22:46 -070069 return runner.Run(application_request);
Aaron Boodmanb34bcbf2015-03-02 10:05:31 -080070}