Pin Chrome's shortcut to the Win10 Start menu on install and OS upgrade.
[chromium-blink-merge.git] / mojo / runner / native_runner_unittest.cc
bloba23795122d1880b1c08150fa103e257d4cf71cdd
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
3 // found in the LICENSE file.
5 #include "base/files/scoped_temp_dir.h"
6 #include "mojo/runner/context.h"
7 #include "mojo/shell/application_manager.h"
8 #include "mojo/util/filename_util.h"
9 #include "testing/gtest/include/gtest/gtest.h"
11 namespace mojo {
12 namespace runner {
13 namespace {
15 struct TestState {
16 TestState()
17 : runner_was_created(false),
18 runner_was_started(false),
19 runner_was_destroyed(false) {}
21 bool runner_was_created;
22 bool runner_was_started;
23 bool runner_was_destroyed;
26 class TestNativeRunner : public shell::NativeRunner {
27 public:
28 explicit TestNativeRunner(TestState* state) : state_(state) {
29 state_->runner_was_created = true;
31 ~TestNativeRunner() override {
32 state_->runner_was_destroyed = true;
33 base::MessageLoop::current()->Quit();
35 void Start(const base::FilePath& app_path,
36 shell::NativeApplicationCleanup cleanup,
37 InterfaceRequest<Application> application_request,
38 const base::Closure& app_completed_callback) override {
39 state_->runner_was_started = true;
42 private:
43 TestState* state_;
46 class TestNativeRunnerFactory : public shell::NativeRunnerFactory {
47 public:
48 explicit TestNativeRunnerFactory(TestState* state) : state_(state) {}
49 ~TestNativeRunnerFactory() override {}
50 scoped_ptr<shell::NativeRunner> Create(const Options& options) override {
51 return scoped_ptr<shell::NativeRunner>(new TestNativeRunner(state_));
54 private:
55 TestState* state_;
58 class NativeApplicationLoaderTest : public testing::Test,
59 public shell::ApplicationManager::Delegate {
60 public:
61 NativeApplicationLoaderTest() : application_manager_(this) {}
62 ~NativeApplicationLoaderTest() override {}
63 void SetUp() override {
64 context_.Init();
65 scoped_ptr<shell::NativeRunnerFactory> factory(
66 new TestNativeRunnerFactory(&state_));
67 application_manager_.set_native_runner_factory(factory.Pass());
68 application_manager_.set_blocking_pool(
69 context_.task_runners()->blocking_pool());
71 void TearDown() override { context_.Shutdown(); }
73 protected:
74 Context context_;
75 base::MessageLoop loop_;
76 shell::ApplicationManager application_manager_;
77 TestState state_;
79 private:
80 // shell::ApplicationManager::Delegate
81 GURL ResolveMappings(const GURL& url) override { return url; }
82 GURL ResolveMojoURL(const GURL& url) override { return url; }
83 bool CreateFetcher(
84 const GURL& url,
85 const shell::Fetcher::FetchCallback& loader_callback) override {
86 return false;
90 TEST_F(NativeApplicationLoaderTest, DoesNotExist) {
91 base::ScopedTempDir temp_dir;
92 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
93 base::FilePath nonexistent_file(FILE_PATH_LITERAL("nonexistent.txt"));
94 GURL url(util::FilePathToFileURL(temp_dir.path().Append(nonexistent_file)));
95 InterfaceRequest<ServiceProvider> services;
96 ServiceProviderPtr service_provider;
97 mojo::URLRequestPtr request(mojo::URLRequest::New());
98 request->url = mojo::String::From(url.spec());
99 application_manager_.ConnectToApplication(
100 nullptr, request.Pass(), std::string(), GURL(), services.Pass(),
101 service_provider.Pass(), nullptr, base::Closure());
102 EXPECT_FALSE(state_.runner_was_created);
103 EXPECT_FALSE(state_.runner_was_started);
104 EXPECT_FALSE(state_.runner_was_destroyed);
107 } // namespace
108 } // namespace runner
109 } // namespace mojo