16e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
26e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
36e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// found in the LICENSE file.
46e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "mojo/application_manager/background_shell_application_loader.h"
66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace mojo {
106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace {
126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class DummyLoader : public ApplicationLoader {
146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public:
156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DummyLoader() : simulate_app_quit_(true) {}
166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual ~DummyLoader() {}
176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // ApplicationLoader overrides:
196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual void Load(ApplicationManager* manager,
206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                    const GURL& url,
216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                    scoped_refptr<LoadCallbacks> callbacks) OVERRIDE {
226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    if (simulate_app_quit_)
236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      base::MessageLoop::current()->Quit();
246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void OnApplicationError(ApplicationManager* manager,
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                  const GURL& url) OVERRIDE {}
286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  void DontSimulateAppQuit() { simulate_app_quit_ = false; }
306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private:
326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  bool simulate_app_quit_;
336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)};
346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}  // namespace
366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Tests that the loader can start and stop gracefully.
386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST(BackgroundShellApplicationLoaderTest, StartStop) {
396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  scoped_ptr<ApplicationLoader> real_loader(new DummyLoader());
406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  BackgroundShellApplicationLoader loader(
416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      real_loader.Pass(), "test", base::MessageLoop::TYPE_DEFAULT);
426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Tests that the loader can load a service that is well behaved (quits
456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// itself).
466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST(BackgroundShellApplicationLoaderTest, Load) {
476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  scoped_ptr<ApplicationLoader> real_loader(new DummyLoader());
486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  BackgroundShellApplicationLoader loader(
496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      real_loader.Pass(), "test", base::MessageLoop::TYPE_DEFAULT);
506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  MessagePipe dummy;
516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  scoped_refptr<ApplicationLoader::SimpleLoadCallbacks> callbacks(
526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      new ApplicationLoader::SimpleLoadCallbacks(dummy.handle0.Pass()));
536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  loader.Load(NULL, GURL(), callbacks);
546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}  // namespace mojo
57