| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef MOJO_APPS_JS_CONTENT_HANDLER_H_ |
| #define MOJO_APPS_JS_CONTENT_HANDLER_H_ |
| |
| #include "base/memory/scoped_ptr.h" |
| #include "base/memory/scoped_vector.h" |
| #include "mojo/public/cpp/application/application_delegate.h" |
| #include "mojo/public/cpp/system/message_pipe.h" |
| |
| namespace mojo { |
| |
| class ApplcationImpl; |
| |
| namespace apps { |
| |
| class ApplicationDelegateImpl; |
| class JSApp; |
| |
| // Manages the JSApps started by this content handler. This class owns the one |
| // reference to the Mojo shell. JSApps post a task to the content handler's |
| // thread to connect to a service or to quit. |
| // |
| // The lifetime each JSApp is defined by its entry in AppVector. When the entry |
| // is removed ("erased") by QuitJSApp(), the JSApp is destroyed. |
| |
| class ApplicationDelegateImpl : public ApplicationDelegate { |
| public: |
| ApplicationDelegateImpl(); |
| ~ApplicationDelegateImpl() override; |
| |
| // Add app to the AppVector and call its Start() method. |
| void StartJSApp(scoped_ptr<JSApp> app); |
| |
| // Remove app from the AppVector; destroys the app. |
| void QuitJSApp(JSApp *app); |
| |
| void ConnectToService(ScopedMessagePipeHandle pipe_handle, |
| const std::string& application_url, |
| const std::string& interface_name); |
| |
| protected: |
| // ApplicationDelegate: |
| void Initialize(ApplicationImpl* app) override; |
| |
| private: |
| typedef ScopedVector<JSApp> AppVector; |
| ApplicationImpl* application_impl_; |
| AppVector app_vector_; |
| }; |
| |
| } // namespace apps |
| } // namespace mojo |
| |
| #endif // MOJO_APPS_JS_CONTENT_HANDLER_H_ |