blob: 7c9ec29b34de00eb432b89373b368bad431ee203 [file] [log] [blame]
// 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/ref_counted.h"
#include "base/memory/scoped_vector.h"
#include "mojo/public/cpp/application/application_delegate.h"
#include "mojo/public/cpp/application/interface_factory_impl.h"
#include "mojo/services/public/interfaces/content_handler/content_handler.mojom.h"
namespace mojo {
class ApplcationImpl;
namespace apps {
class ApplicationDelegateImpl;
class JSApp;
// Starts a new JSApp for each OnConnect call().
class ContentHandlerImpl : public InterfaceImpl<ContentHandler> {
public:
ContentHandlerImpl(ApplicationDelegateImpl* content_handler);
virtual ~ContentHandlerImpl();
private:
virtual void OnConnect(const mojo::String& url,
URLResponsePtr content,
InterfaceRequest<ServiceProvider> service_provider)
MOJO_OVERRIDE;
ApplicationDelegateImpl* content_handler_;
};
// 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.l
class ApplicationDelegateImpl : public ApplicationDelegate {
public:
ApplicationDelegateImpl();
virtual ~ApplicationDelegateImpl();
void StartJSApp(const std::string& url, URLResponsePtr content);
void QuitJSApp(JSApp* app);
void ConnectToService(ScopedMessagePipeHandle pipe_handle,
const std::string& application_url,
const std::string& interface_name);
private:
typedef ScopedVector<JSApp> AppVector;
// ApplicationDelegate methods
virtual void Initialize(ApplicationImpl* app) MOJO_OVERRIDE;
virtual bool ConfigureIncomingConnection(ApplicationConnection* connection)
MOJO_OVERRIDE;
ApplicationImpl* application_impl_;
InterfaceFactoryImplWithContext<ContentHandlerImpl, ApplicationDelegateImpl>
content_handler_factory_;
AppVector app_vector_;
};
} // namespace apps
} // namespace mojo
#endif // MOJO_APPS_JS_CONTENT_HANDLER_H_