1 // Copyright (c) 2013 Intel Corporation. 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.
5 #ifndef XWALK_APPLICATION_BROWSER_APPLICATION_SERVICE_H_
6 #define XWALK_APPLICATION_BROWSER_APPLICATION_SERVICE_H_
9 #include "base/files/file_path.h"
10 #include "base/memory/scoped_ptr.h"
11 #include "base/memory/scoped_vector.h"
12 #include "base/observer_list.h"
13 #include "xwalk/application/browser/application.h"
14 #include "xwalk/application/common/permission_policy_manager.h"
15 #include "xwalk/runtime/browser/runtime_context.h"
16 #include "xwalk/application/common/application_data.h"
22 namespace application {
24 class ApplicationStorage;
26 // The application service manages install, uninstall and updates of
28 class ApplicationService : public Application::Observer {
30 // Client code may use this class (and register with AddObserver below) to
31 // keep track of [un]installation of applications.
34 virtual void OnApplicationInstalled(const std::string& app_id) {}
35 virtual void OnApplicationUninstalled(const std::string& app_id) {}
36 virtual void OnApplicationUpdated(const std::string& app_id) {}
37 // When we change the application locale, we might get a new name in
39 virtual void OnApplicationNameChanged(const std::string& app_id,
40 const std::string& app_name) {}
42 virtual void DidLaunchApplication(Application* app) {}
43 virtual void WillDestroyApplication(Application* app) {}
45 virtual ~Observer() {}
48 ApplicationService(RuntimeContext* runtime_context,
49 ApplicationStorage* app_storage);
50 virtual ~ApplicationService();
52 bool Install(const base::FilePath& path, std::string* id);
53 bool Uninstall(const std::string& id);
54 bool Update(const std::string& id, const base::FilePath& path);
55 void ChangeLocale(const std::string& locale);
57 Application* Launch(scoped_refptr<ApplicationData> application_data,
58 const Application::LaunchParams& launch_params);
59 // Launch an installed application using application id.
61 const std::string& id,
62 const Application::LaunchParams& params = Application::LaunchParams());
63 // Launch an unpacked application using path to a local directory which
64 // contains manifest file.
66 const base::FilePath& path,
67 const Application::LaunchParams& params = Application::LaunchParams());
69 Application* GetApplicationByRenderHostID(int id) const;
70 Application* GetApplicationByID(const std::string& app_id) const;
72 const ScopedVector<Application>& active_applications() const {
73 return applications_; }
75 void AddObserver(Observer* observer);
76 void RemoveObserver(Observer* observer);
78 // Check whether application has permission to access API of extension.
79 void CheckAPIAccessControl(const std::string& app_id,
80 const std::string& extension_name,
81 const std::string& api_name, const PermissionCallback& callback);
82 // Register APIs implemented by extension. This method will be called
83 // when application register extensions.
84 // Parameter perm_table is a string which is a map between extension
85 // and it includes APIs. For example perm_table is like '{"bluetooth":
86 // ["read", "write", "management"]}'.
87 bool RegisterPermissions(const std::string& app_id,
88 const std::string& extension_name,
89 const std::string& perm_table);
92 // Implementation of Application::Observer.
93 virtual void OnApplicationTerminated(Application* app) OVERRIDE;
96 xwalk::RuntimeContext* runtime_context_;
97 ApplicationStorage* application_storage_;
98 ScopedVector<Application> applications_;
99 ObserverList<Observer> observers_;
100 scoped_ptr<PermissionPolicyManager> permission_policy_handler_;
102 DISALLOW_COPY_AND_ASSIGN(ApplicationService);
105 } // namespace application
108 #endif // XWALK_APPLICATION_BROWSER_APPLICATION_SERVICE_H_