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. 4 5 #ifndef MOJO_APPLICATION_APPLICATION_RUNNER_CHROMIUM_H_ 6 #define MOJO_APPLICATION_APPLICATION_RUNNER_CHROMIUM_H_ 7 8 #include "base/memory/scoped_ptr.h" 9 #include "base/message_loop/message_loop.h" 10 #include "mojo/public/cpp/system/core.h" 11 12 namespace mojo { 13 14 class ApplicationDelegate; 15 16 // A utility for running a chromium based mojo Application. The typical use 17 // case is to use when writing your MojoMain: 18 // 19 // MojoResult MojoMain(MojoHandle shell_handle) { 20 // mojo::ApplicationRunnerChromium runner(new MyDelegate()); 21 // return runner.Run(shell_handle); 22 // } 23 // 24 // ApplicationRunnerChromium takes care of chromium environment initialization 25 // and shutdown, and starting a MessageLoop from which your application can run 26 // and ultimately Quit(). 27 class ApplicationRunnerChromium { 28 public: 29 // Takes ownership of |delegate|. 30 explicit ApplicationRunnerChromium(ApplicationDelegate* delegate); 31 ~ApplicationRunnerChromium(); 32 33 void set_message_loop_type(base::MessageLoop::Type type); 34 35 // Once the various parameters have been set above, use Run to initialize an 36 // ApplicationImpl wired to the provided delegate, and run a MessageLoop until 37 // the application exits. 38 MojoResult Run(MojoHandle shell_handle); 39 40 private: 41 scoped_ptr<ApplicationDelegate> delegate_; 42 43 // MessageLoop type. TYPE_CUSTOM is default (MessagePumpMojo will be used as 44 // the underlying message pump). 45 base::MessageLoop::Type message_loop_type_; 46 // Whether Run() has been called. 47 bool has_run_; 48 49 MOJO_DISALLOW_COPY_AND_ASSIGN(ApplicationRunnerChromium); 50 }; 51 52 } // namespace mojo 53 54 #endif // MOJO_APPLICATION_APPLICATION_RUNNER_CHROMIUM_H_ 55