Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / mojo / application_manager / application_loader.h
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_MANAGER_APPLICATION_LOADER_H_
6 #define MOJO_APPLICATION_MANAGER_APPLICATION_LOADER_H_
7
8 #include "base/memory/ref_counted.h"
9 #include "mojo/application_manager/application_manager_export.h"
10 #include "mojo/public/cpp/system/core.h"
11 #include "mojo/services/public/interfaces/network/url_loader.mojom.h"
12 #include "url/gurl.h"
13
14 namespace mojo {
15
16 class ApplicationManager;
17
18 // Interface to allowing loading behavior to be established for schemes,
19 // specific urls or as the default.
20 // A ApplicationLoader is responsible to using whatever mechanism is appropriate
21 // to load the application at url.
22 // The handle to the shell is passed to that application so it can bind it to
23 // a Shell instance. This will give the Application a way to connect to other
24 // apps and services.
25 class MOJO_APPLICATION_MANAGER_EXPORT ApplicationLoader {
26  public:
27   class MOJO_APPLICATION_MANAGER_EXPORT LoadCallbacks
28       : public base::RefCounted<LoadCallbacks> {
29    public:
30     // Register the requested application with ApplicationManager. If the
31     // returned handle is valid, it should be used to implement the
32     // mojo::Application interface.
33     virtual ScopedMessagePipeHandle RegisterApplication() = 0;
34
35     // Load the requested application with a content handler.
36     virtual void LoadWithContentHandler(const GURL& content_handler_url,
37                                         URLResponsePtr response) = 0;
38
39    protected:
40     friend base::RefCounted<LoadCallbacks>;
41     virtual ~LoadCallbacks() {}
42   };
43
44   // Implements RegisterApplication() by returning a handle that was specified
45   // at construction time. LoadWithContentHandler() is not supported.
46   class MOJO_APPLICATION_MANAGER_EXPORT SimpleLoadCallbacks
47       : public LoadCallbacks {
48    public:
49     SimpleLoadCallbacks(ScopedMessagePipeHandle shell_handle);
50     virtual ScopedMessagePipeHandle RegisterApplication() OVERRIDE;
51     virtual void LoadWithContentHandler(const GURL& content_handler_url,
52                                         URLResponsePtr response) OVERRIDE;
53
54    private:
55     ScopedMessagePipeHandle shell_handle_;
56     virtual ~SimpleLoadCallbacks();
57   };
58
59   virtual ~ApplicationLoader() {}
60
61   // Load the application named |url|. Applications can be loaded two ways:
62   //
63   // 1. |url| can refer directly to a Mojo application. In this case, call
64   //    callbacks->RegisterApplication(). The returned handle should be used to
65   //    implement the mojo.Application interface. Note that the returned handle
66   //    can be invalid in the case where the application has already been
67   //    loaded.
68   //
69   // 2. |url| can refer to some content that can be handled by some other Mojo
70   //    application. In this case, call callbacks->LoadWithContentHandler() and
71   //    specify the URL of the application that should handle the content.
72   //    The specified application must implement the mojo.ContentHandler
73   //    interface.
74   virtual void Load(ApplicationManager* application_manager,
75                     const GURL& url,
76                     scoped_refptr<LoadCallbacks> callbacks) = 0;
77
78   virtual void OnServiceError(ApplicationManager* manager, const GURL& url) = 0;
79
80  protected:
81   ApplicationLoader() {}
82 };
83
84 }  // namespace mojo
85
86 #endif  // MOJO_APPLICATION_MANAGER_APPLICATION_LOADER_H_