e02e19f13630f2bdd9df7c16021d39308584f970
[platform/framework/web/chromium-efl.git] / tizen_src / ewk / efl_integration / eweb_context.h
1 // Copyright 2014-2015 Samsung Electronics. 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 EWEB_CONTEXT_H
6 #define EWEB_CONTEXT_H
7
8 #include "base/files/file_path.h"
9 #include "browser/web_cache_efl/web_cache_manager_efl.h"
10 #include "common/tizen_extensible.h"
11 #include "private/ewk_cookie_manager_private.h"
12 #include "public/ewk_context.h"
13 #include "public/ewk_notification.h"
14 #include "devtools_delegate_efl.h"
15
16 class CookieManager;
17 class Ewk_Wrt_Message_Data;
18 class TizenExtensible;
19 class EwkFaviconDatabase;
20
21 namespace content {
22 class BrowserContextEfl;
23 }
24
25 class EWebContextNotificationCallback {
26  public:
27   EWebContextNotificationCallback(
28       Ewk_Context* context,
29       Ewk_Context_Notification_Show_Callback show_cb,
30       Ewk_Context_Notification_Cancel_Callback cancel_cb,
31       void* data)
32     : context_(context)
33     , show_cb_(show_cb)
34     , cancel_cb_(cancel_cb)
35     , user_data_(data) { }
36
37   bool HasShowCallback() const { return show_cb_ != nullptr; }
38   bool HasCancelCallback() const { return cancel_cb_ != nullptr; }
39   bool RunShowCallback(Ewk_Notification* request) {
40     if (context_ && HasShowCallback()) {
41       show_cb_(context_, request, user_data_);
42       return true;
43     }
44     return false;
45   }
46   bool RunCancelCallback(uint64_t notification_id) {
47     if (context_ && HasCancelCallback()) {
48       cancel_cb_(context_, notification_id, user_data_);
49       return true;
50     }
51     return false;
52   }
53
54  private:
55   Ewk_Context* context_;
56   Ewk_Context_Notification_Show_Callback show_cb_;
57   Ewk_Context_Notification_Cancel_Callback cancel_cb_;
58   void* user_data_;
59 };
60
61 class EwkDidStartDownloadCallback {
62  public:
63   EwkDidStartDownloadCallback(Ewk_Context_Did_Start_Download_Callback callback,
64                               void* user_data)
65     : callback_(callback), user_data_(user_data)
66     { }
67   void TriggerCallback(const std::string& url);
68  private:
69   Ewk_Context_Did_Start_Download_Callback callback_;
70   void* user_data_;
71 };
72
73 class EwkMimeOverrideCallback {
74  public:
75   EwkMimeOverrideCallback(Ewk_Context_Override_Mime_For_Url_Callback callback,
76                           void* user_data)
77       : callback_(callback), user_data_(user_data) {
78   }
79   bool TriggerCallback(const std::string& url_spec,
80                        const std::string& mime_type,
81                        char** new_mime_type) const;
82  private:
83   Ewk_Context_Override_Mime_For_Url_Callback callback_;
84   void* user_data_;
85 };
86
87 class EWebContext {
88  public:
89   content::BrowserContextEfl* browser_context() const { return browser_context_.get(); }
90
91   void ClearNetworkCache();
92   void ClearWebkitCache();
93   void AddExtraPluginDir(const char *path);
94   void SetCertificate(const char* certificate_file);
95
96   void SetCacheModel(Ewk_Cache_Model);
97   Ewk_Cache_Model GetCacheModel() const;
98   void SetNetworkCacheEnable(bool enable);
99   bool GetNetworkCacheEnable() const;
100
101   void NotifyLowMemory();
102
103   bool HTTPCustomHeaderAdd(const std::string& name, const std::string& value);
104   bool HTTPCustomHeaderRemove(const std::string& name);
105   void HTTPCustomHeaderClear();
106
107   Ewk_Cookie_Manager* ewkCookieManager();
108   scoped_refptr<CookieManager> cookieManager()
109   { return ewkCookieManager()->cookieManager(); }
110   void SetProxyUri(const char* uri);
111   const char* GetProxyUri() const
112   { return proxy_uri_.c_str(); }
113   //download start callback handlers
114   void SetDidStartDownloadCallback(Ewk_Context_Did_Start_Download_Callback callback,
115                                    void* user_data);
116   EwkDidStartDownloadCallback* DidStartDownloadCallback();
117   void DeleteAllApplicationCache();
118   void DeleteApplicationCacheForSite(const GURL&);
119   void GetAllOriginsWithApplicationCache(Ewk_Web_Application_Cache_Origins_Get_Callback callback,
120                                          void* user_data);
121   void GetApplicationCacheUsage(
122       const GURL& url,
123       Ewk_Web_Application_Cache_Usage_For_Origin_Get_Callback callback,
124       void* user_data);
125   void GetAllOriginsWithWebDB(Ewk_Web_Database_Origins_Get_Callback callback, void* user_data);
126   void WebDBDelete(const GURL& host);
127   void IndexedDBDelete();
128   void WebStorageDelete();
129   void WebStorageDeleteForOrigin(const GURL& origin);
130   void WebStorageOriginsAllGet(Ewk_Web_Storage_Origins_Get_Callback callback, void* user_data);
131   void FileSystemDelete(const GURL& host);
132   void GetAllOriginsWithFileSystem(Ewk_Local_File_System_Origins_Get_Callback callback, void* user_data) const;
133   bool SetFaviconDatabasePath(const base::FilePath& path);
134   Evas_Object *AddFaviconObject(const char *uri, Evas *canvas) const;
135
136   void SendWidgetInfo(const std::string& tizen_id, double scale, const std::string &theme, const std::string &encoded_bundle);
137   void SendWrtMessage(const Ewk_Wrt_Message_Data& message);
138
139   void SetMimeOverrideCallback(Ewk_Context_Override_Mime_For_Url_Callback callback,
140                                void* user_data);
141   bool OverrideMimeForURL(const std::string& url_spec, const std::string& mime_type,
142                           std::string& new_mime_type) const;
143
144   void SetPixmap(int pixmap) { m_pixmap = pixmap; }
145   int Pixmap() const { return m_pixmap; }
146
147   void ClearCandidateData();
148   void ClearPasswordData();
149   EwkFaviconDatabase* GetFaviconDatabase() const {
150     return ewk_favicon_database_.get();
151   }
152
153   unsigned int InspectorServerStart(unsigned int port);
154   bool InspectorServerStop();
155
156   void SetNotificationCallbacks(
157       Ewk_Context* context,
158       Ewk_Context_Notification_Show_Callback show_callback,
159       Ewk_Context_Notification_Cancel_Callback cancel_callback,
160       void* user_data);
161   bool HasNotificationCallbacks() const;
162   bool NotificationShowCallback(Ewk_Notification* notification);
163   bool NotificationCancelCallback(uint64_t notification_id);
164
165   const std::string& GetInjectedBundlePath() const { return injected_bundle_path_; }
166   const std::string& GetTizenId() const { return tizen_id_; }
167   const std::string& GetWidgetTheme() const { return widget_theme_; }
168   const std::string& GetWidgetEncodedBundle() const { return widget_encoded_bundle_; }
169   double GetWidgetScale() const { return widget_scale_; }
170
171   bool SetExtensibleAPI(const std::string& api_name, bool enable);
172   bool GetExtensibleAPI(const std::string& api_name);
173
174  private:
175   EWebContext(bool incognito);
176   EWebContext(const std::string& injectedBundlePath);
177   EWebContext(bool incognito, const std::string& injectedBundlePath);
178   ~EWebContext();
179   friend class Ewk_Context;
180
181   std::unique_ptr<WebCacheManagerEfl> web_cache_manager_;
182   std::unique_ptr<content::BrowserContextEfl> browser_context_;
183   std::unique_ptr<Ewk_Cookie_Manager> ewk_cookie_manager_;
184   std::unique_ptr<TizenExtensible> tizen_extensible_;
185   std::unique_ptr<EwkFaviconDatabase> ewk_favicon_database_;
186   std::string proxy_uri_;
187   std::string injected_bundle_path_;
188   // widget info
189   std::string tizen_id_;
190   std::string widget_theme_;
191   std::string widget_encoded_bundle_;
192   double widget_scale_;
193
194   std::unique_ptr<EwkDidStartDownloadCallback> start_download_callback_;
195   std::unique_ptr<EwkMimeOverrideCallback> mime_override_callback_;
196   int m_pixmap;
197   content::DevToolsDelegateEfl* inspector_server_;
198   std::unique_ptr<EWebContextNotificationCallback> notification_cb_;
199 };
200
201 #endif