Home | History | Annotate | Download | only in js
      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_APPS_JS_CONTENT_HANDLER_H_
      6 #define MOJO_APPS_JS_CONTENT_HANDLER_H_
      7 
      8 #include "base/memory/ref_counted.h"
      9 #include "base/memory/scoped_vector.h"
     10 #include "mojo/public/cpp/application/application_delegate.h"
     11 #include "mojo/public/cpp/application/interface_factory_impl.h"
     12 #include "mojo/services/public/interfaces/content_handler/content_handler.mojom.h"
     13 
     14 namespace mojo {
     15 
     16 class ApplcationImpl;
     17 
     18 namespace apps {
     19 
     20 class ApplicationDelegateImpl;
     21 class JSApp;
     22 
     23 // Starts a new JSApp for each OnConnect call().
     24 
     25 class ContentHandlerImpl : public InterfaceImpl<ContentHandler> {
     26  public:
     27   ContentHandlerImpl(ApplicationDelegateImpl* content_handler);
     28   virtual ~ContentHandlerImpl();
     29 
     30  private:
     31   virtual void OnConnect(const mojo::String& url,
     32                          URLResponsePtr content,
     33                          InterfaceRequest<ServiceProvider> service_provider)
     34       MOJO_OVERRIDE;
     35 
     36   ApplicationDelegateImpl* content_handler_;
     37 };
     38 
     39 // Manages the JSApps started by this content handler. This class owns the one
     40 // reference to the Mojo shell. JSApps post a task to the content handler's
     41 // thread to connect to a service or to quit.l
     42 
     43 class ApplicationDelegateImpl : public ApplicationDelegate {
     44  public:
     45   ApplicationDelegateImpl();
     46   virtual ~ApplicationDelegateImpl();
     47 
     48   void StartJSApp(const std::string& url, URLResponsePtr content);
     49   void QuitJSApp(JSApp* app);
     50 
     51   void ConnectToService(ScopedMessagePipeHandle pipe_handle,
     52                         const std::string& application_url,
     53                         const std::string& interface_name);
     54 
     55  private:
     56   typedef ScopedVector<JSApp> AppVector;
     57 
     58   // ApplicationDelegate methods
     59   virtual void Initialize(ApplicationImpl* app) MOJO_OVERRIDE;
     60   virtual bool ConfigureIncomingConnection(ApplicationConnection* connection)
     61       MOJO_OVERRIDE;
     62 
     63   ApplicationImpl* application_impl_;
     64   InterfaceFactoryImplWithContext<ContentHandlerImpl, ApplicationDelegateImpl>
     65       content_handler_factory_;
     66   AppVector app_vector_;
     67 };
     68 
     69 }  // namespace apps
     70 }  // namespace mojo
     71 
     72 #endif  // MOJO_APPS_JS_CONTENT_HANDLER_H_
     73