summaryrefslogtreecommitdiff
path: root/Source/WebKit2/UIProcess/API
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit2/UIProcess/API')
-rw-r--r--Source/WebKit2/UIProcess/API/efl/PageClientImpl.cpp2
-rw-r--r--Source/WebKit2/UIProcess/API/efl/ewk_context.cpp289
-rw-r--r--Source/WebKit2/UIProcess/API/efl/ewk_context_download_client.cpp22
-rw-r--r--Source/WebKit2/UIProcess/API/efl/ewk_context_history_client.cpp41
-rw-r--r--Source/WebKit2/UIProcess/API/efl/ewk_context_private.h91
-rw-r--r--Source/WebKit2/UIProcess/API/efl/ewk_context_request_manager_client.cpp4
-rw-r--r--Source/WebKit2/UIProcess/API/efl/ewk_view.cpp23
7 files changed, 282 insertions, 190 deletions
diff --git a/Source/WebKit2/UIProcess/API/efl/PageClientImpl.cpp b/Source/WebKit2/UIProcess/API/efl/PageClientImpl.cpp
index 0ca7569b9..054bfcbf7 100644
--- a/Source/WebKit2/UIProcess/API/efl/PageClientImpl.cpp
+++ b/Source/WebKit2/UIProcess/API/efl/PageClientImpl.cpp
@@ -284,7 +284,7 @@ void PageClientImpl::countStringMatchesInCustomRepresentation(const String&, Fin
void PageClientImpl::handleDownloadRequest(DownloadProxy* download)
{
RefPtr<Ewk_Download_Job> ewkDownload = Ewk_Download_Job::create(download, m_viewWidget);
- ewk_context_download_job_add(ewk_view_context_get(m_viewWidget), ewkDownload.get());
+ ewk_view_context_get(m_viewWidget)->addDownloadJob(ewkDownload.get());
}
#if USE(TILED_BACKING_STORE)
diff --git a/Source/WebKit2/UIProcess/API/efl/ewk_context.cpp b/Source/WebKit2/UIProcess/API/efl/ewk_context.cpp
index 9fb889213..32991c5c8 100644
--- a/Source/WebKit2/UIProcess/API/efl/ewk_context.cpp
+++ b/Source/WebKit2/UIProcess/API/efl/ewk_context.cpp
@@ -31,6 +31,7 @@
#include "WKString.h"
#include "WebContext.h"
#include "WebIconDatabase.h"
+#include "WebSoupRequestManagerProxy.h"
#include "ewk_context_download_client_private.h"
#include "ewk_context_history_client_private.h"
#include "ewk_context_private.h"
@@ -69,148 +70,199 @@ struct Ewk_Url_Scheme_Handler {
{ }
};
-typedef HashMap<String, Ewk_Url_Scheme_Handler> URLSchemeHandlerMap;
+typedef HashMap<WKContextRef, Ewk_Context*> ContextMap;
-struct Ewk_Context {
- unsigned __ref; /**< the reference count of the object */
- WKRetainPtr<WKContextRef> context;
-
- OwnPtr<Ewk_Cookie_Manager> cookieManager;
- OwnPtr<Ewk_Favicon_Database> faviconDatabase;
-#if ENABLE(BATTERY_STATUS)
- RefPtr<BatteryProvider> batteryProvider;
-#endif
-#if ENABLE(NETWORK_INFO)
- RefPtr<NetworkInfoProvider> networkInfoProvider;
-#endif
-#if ENABLE(VIBRATION)
- RefPtr<VibrationProvider> vibrationProvider;
-#endif
- HashMap<uint64_t, RefPtr<Ewk_Download_Job> > downloadJobs;
-
- WKRetainPtr<WKSoupRequestManagerRef> requestManager;
- URLSchemeHandlerMap urlSchemeHandlers;
+static inline ContextMap& contextMap()
+{
+ DEFINE_STATIC_LOCAL(ContextMap, map, ());
+ return map;
+}
- Ewk_Context_History_Client historyClient;
+Ewk_Context::Ewk_Context(WKContextRef context)
+ : m_context(context)
+ , m_requestManager(WKContextGetSoupRequestManager(context))
+ , m_historyClient()
+{
+ ContextMap::AddResult result = contextMap().add(context, this);
+ ASSERT_UNUSED(result, result.isNewEntry);
- Ewk_Context(WKRetainPtr<WKContextRef> contextRef)
- : __ref(1)
- , context(contextRef)
- , requestManager(WKContextGetSoupRequestManager(contextRef.get()))
- , historyClient()
- {
#if ENABLE(BATTERY_STATUS)
- batteryProvider = BatteryProvider::create(context.get());
+ m_batteryProvider = BatteryProvider::create(context);
#endif
#if ENABLE(NETWORK_INFO)
- networkInfoProvider = NetworkInfoProvider::create(context.get());
+ m_networkInfoProvider = NetworkInfoProvider::create(context);
#endif
#if ENABLE(VIBRATION)
- vibrationProvider = VibrationProvider::create(context.get());
+ m_vibrationProvider = VibrationProvider::create(context);
#endif
#if ENABLE(MEMORY_SAMPLER)
- static bool initializeMemorySampler = false;
- static const char environmentVariable[] = "SAMPLE_MEMORY";
+ static bool initializeMemorySampler = false;
+ static const char environmentVariable[] = "SAMPLE_MEMORY";
- if (!initializeMemorySampler && getenv(environmentVariable)) {
- WKRetainPtr<WKDoubleRef> interval(AdoptWK, WKDoubleCreate(0.0));
- WKContextStartMemorySampler(context.get(), interval.get());
- initializeMemorySampler = true;
- }
+ if (!initializeMemorySampler && getenv(environmentVariable)) {
+ WKRetainPtr<WKDoubleRef> interval(AdoptWK, WKDoubleCreate(0.0));
+ WKContextStartMemorySampler(context, interval.get());
+ initializeMemorySampler = true;
+ }
#endif
- ewk_context_request_manager_client_attach(this);
- ewk_context_download_client_attach(this);
- ewk_context_history_client_attach(this);
+
#if ENABLE(SPELLCHECK)
- ewk_text_checker_client_attach();
- if (ewk_settings_continuous_spell_checking_enabled_get()) {
- // Load the default language.
- ewk_settings_spell_checking_languages_set(0);
- }
-#endif
+ ewk_text_checker_client_attach();
+ if (ewk_settings_continuous_spell_checking_enabled_get()) {
+ // Load the default language.
+ ewk_settings_spell_checking_languages_set(0);
}
-};
+#endif
-Ewk_Context* ewk_context_ref(Ewk_Context* ewkContext)
+ ewk_context_request_manager_client_attach(this);
+ ewk_context_download_client_attach(this);
+ ewk_context_history_client_attach(this);
+}
+
+Ewk_Context::~Ewk_Context()
{
- EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, 0);
- ++ewkContext->__ref;
+ ASSERT(contextMap().get(m_context.get()) == this);
+ contextMap().remove(m_context.get());
+}
- return ewkContext;
+PassRefPtr<Ewk_Context> Ewk_Context::create(WKContextRef context)
+{
+ if (contextMap().contains(context))
+ return contextMap().get(context); // Will be ref-ed automatically.
+
+ return adoptRef(new Ewk_Context(context));
}
-void ewk_context_unref(Ewk_Context* ewkContext)
+PassRefPtr<Ewk_Context> Ewk_Context::create()
{
- EINA_SAFETY_ON_NULL_RETURN(ewkContext);
- EINA_SAFETY_ON_FALSE_RETURN(ewkContext->__ref > 0);
+ return create(adoptWK(WKContextCreate()).get());
+}
- if (--ewkContext->__ref)
- return;
+PassRefPtr<Ewk_Context> Ewk_Context::create(const String& injectedBundlePath)
+{
+ if (!fileExists(injectedBundlePath))
+ return 0;
+
+ WKRetainPtr<WKStringRef> injectedBundlePathWK = adoptWK(toCopiedAPI(injectedBundlePath));
+ WKRetainPtr<WKContextRef> contextWK = adoptWK(WKContextCreateWithInjectedBundlePath(injectedBundlePathWK.get()));
- delete ewkContext;
+ return create(contextWK.get());
}
-Ewk_Cookie_Manager* ewk_context_cookie_manager_get(const Ewk_Context* ewkContext)
+PassRefPtr<Ewk_Context> Ewk_Context::defaultContext()
{
- EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, 0);
-
- if (!ewkContext->cookieManager)
- const_cast<Ewk_Context*>(ewkContext)->cookieManager = Ewk_Cookie_Manager::create(WKContextGetCookieManager(ewkContext->context.get()));
+ static RefPtr<Ewk_Context> defaultInstance = create(adoptWK(WKContextCreate()).get());
- return ewkContext->cookieManager.get();
+ return defaultInstance;
}
-Ewk_Favicon_Database* ewk_context_favicon_database_get(const Ewk_Context* ewkContext)
+Ewk_Cookie_Manager* Ewk_Context::cookieManager()
{
- EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, 0);
+ if (!m_cookieManager)
+ m_cookieManager = Ewk_Cookie_Manager::create(WKContextGetCookieManager(m_context.get()));
+
+ return m_cookieManager.get();
+}
- if (!ewkContext->faviconDatabase) {
- WKRetainPtr<WKIconDatabaseRef> iconDatabase = WKContextGetIconDatabase(ewkContext->context.get());
+Ewk_Favicon_Database* Ewk_Context::faviconDatabase()
+{
+ if (!m_faviconDatabase) {
+ WKRetainPtr<WKIconDatabaseRef> iconDatabase = WKContextGetIconDatabase(m_context.get());
// Set the database path if it is not open yet.
if (!toImpl(iconDatabase.get())->isOpen()) {
- WebContext* webContext = toImpl(ewkContext->context.get());
+ WebContext* webContext = toImpl(m_context.get());
String databasePath = webContext->iconDatabasePath() + "/" + WebCore::IconDatabase::defaultDatabaseFilename();
webContext->setIconDatabasePath(databasePath);
}
- const_cast<Ewk_Context*>(ewkContext)->faviconDatabase = Ewk_Favicon_Database::create(iconDatabase.get());
+ m_faviconDatabase = Ewk_Favicon_Database::create(iconDatabase.get());
}
- return ewkContext->faviconDatabase.get();
+ return m_faviconDatabase.get();
}
-WKContextRef ewk_context_WKContext_get(const Ewk_Context* ewkContext)
+bool Ewk_Context::registerURLScheme(const String& scheme, Ewk_Url_Scheme_Request_Cb callback, void* userData)
{
- return ewkContext->context.get();
+ EINA_SAFETY_ON_NULL_RETURN_VAL(callback, false);
+
+ m_urlSchemeHandlers.set(scheme, Ewk_Url_Scheme_Handler(callback, userData));
+ toImpl(m_requestManager.get())->registerURIScheme(scheme);
+
+ return true;
}
-/**
- * @internal
- * Create Ewk_Context from WKContext.
- */
-Ewk_Context* ewk_context_new_from_WKContext(WKContextRef contextRef)
+#if ENABLE(VIBRATION)
+PassRefPtr<VibrationProvider> Ewk_Context::vibrationProvider()
+{
+ return m_vibrationProvider;
+}
+#endif
+
+void Ewk_Context::addVisitedLink(const String& visitedURL)
{
- EINA_SAFETY_ON_NULL_RETURN_VAL(contextRef, 0);
+ toImpl(m_context.get())->addVisitedLink(visitedURL);
+}
+
+void Ewk_Context::setCacheModel(Ewk_Cache_Model cacheModel)
+{
+ WKContextSetCacheModel(m_context.get(), static_cast<Ewk_Cache_Model>(cacheModel));
+}
+
+Ewk_Cache_Model Ewk_Context::cacheModel() const
+{
+ return static_cast<Ewk_Cache_Model>(WKContextGetCacheModel(m_context.get()));
+}
+
+Ewk_Context* ewk_context_ref(Ewk_Context* ewkContext)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, 0);
+
+ ewkContext->ref();
+
+ return ewkContext;
+}
+
+void ewk_context_unref(Ewk_Context* ewkContext)
+{
+ EINA_SAFETY_ON_NULL_RETURN(ewkContext);
+
+ ewkContext->deref();
+}
+
+Ewk_Cookie_Manager* ewk_context_cookie_manager_get(const Ewk_Context* ewkContext)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, 0);
+
+ return const_cast<Ewk_Context*>(ewkContext)->cookieManager();
+}
- return new Ewk_Context(contextRef);
+Ewk_Favicon_Database* ewk_context_favicon_database_get(const Ewk_Context* ewkContext)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, 0);
+
+ return const_cast<Ewk_Context*>(ewkContext)->faviconDatabase();
+}
+
+WKContextRef Ewk_Context::wkContext()
+{
+ return m_context.get();
}
/**
* @internal
* Registers that a new download has been requested.
*/
-void ewk_context_download_job_add(Ewk_Context* ewkContext, Ewk_Download_Job* ewkDownload)
+void Ewk_Context::addDownloadJob(Ewk_Download_Job* ewkDownload)
{
- EINA_SAFETY_ON_NULL_RETURN(ewkContext);
EINA_SAFETY_ON_NULL_RETURN(ewkDownload);
uint64_t downloadId = ewkDownload->id();
- if (ewkContext->downloadJobs.contains(downloadId))
+ if (m_downloadJobs.contains(downloadId))
return;
- ewkContext->downloadJobs.add(downloadId, ewkDownload);
+ m_downloadJobs.add(downloadId, ewkDownload);
}
/**
@@ -218,11 +270,9 @@ void ewk_context_download_job_add(Ewk_Context* ewkContext, Ewk_Download_Job* ewk
* Returns the #Ewk_Download_Job with the given @a downloadId, or
* @c 0 in case of failure.
*/
-Ewk_Download_Job* ewk_context_download_job_get(const Ewk_Context* ewkContext, uint64_t downloadId)
+Ewk_Download_Job* Ewk_Context::downloadJob(uint64_t downloadId)
{
- EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, 0);
-
- return ewkContext->downloadJobs.get(downloadId).get();
+ return m_downloadJobs.get(downloadId).get();
}
/**
@@ -230,10 +280,9 @@ Ewk_Download_Job* ewk_context_download_job_get(const Ewk_Context* ewkContext, ui
* Removes the #Ewk_Download_Job with the given @a downloadId from the internal
* HashMap.
*/
-void ewk_context_download_job_remove(Ewk_Context* ewkContext, uint64_t downloadId)
+void Ewk_Context::removeDownloadJob(uint64_t downloadId)
{
- EINA_SAFETY_ON_NULL_RETURN(ewkContext);
- ewkContext->downloadJobs.remove(downloadId);
+ m_downloadJobs.remove(downloadId);
}
/**
@@ -241,9 +290,9 @@ void ewk_context_download_job_remove(Ewk_Context* ewkContext, uint64_t downloadI
*
* @param ewkContext a #Ewk_Context object.
*/
-WKSoupRequestManagerRef ewk_context_request_manager_get(const Ewk_Context* ewkContext)
+WKSoupRequestManagerRef Ewk_Context::requestManager()
{
- return ewkContext->requestManager.get();
+ return m_requestManager.get();
}
/**
@@ -253,12 +302,11 @@ WKSoupRequestManagerRef ewk_context_request_manager_get(const Ewk_Context* ewkCo
* @param ewkContext a #Ewk_Context object.
* @param schemeRequest a #Ewk_Url_Scheme_Request object.
*/
-void ewk_context_url_scheme_request_received(Ewk_Context* ewkContext, Ewk_Url_Scheme_Request* schemeRequest)
+void Ewk_Context::urlSchemeRequestReceived(Ewk_Url_Scheme_Request* schemeRequest)
{
- EINA_SAFETY_ON_NULL_RETURN(ewkContext);
EINA_SAFETY_ON_NULL_RETURN(schemeRequest);
- Ewk_Url_Scheme_Handler handler = ewkContext->urlSchemeHandlers.get(schemeRequest->scheme());
+ Ewk_Url_Scheme_Handler handler = m_urlSchemeHandlers.get(schemeRequest->scheme());
if (!handler.callback)
return;
@@ -267,38 +315,27 @@ void ewk_context_url_scheme_request_received(Ewk_Context* ewkContext, Ewk_Url_Sc
Ewk_Context* ewk_context_default_get()
{
- static Ewk_Context defaultContext(adoptWK(WKContextCreate()));
-
- return &defaultContext;
+ return Ewk_Context::defaultContext().get();
}
Ewk_Context* ewk_context_new()
{
- return new Ewk_Context(adoptWK(WKContextCreate()));
+ return Ewk_Context::create().leakRef();
}
Ewk_Context* ewk_context_new_with_injected_bundle_path(const char* path)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(path, 0);
- WKRetainPtr<WKStringRef> pathRef(AdoptWK, WKStringCreateWithUTF8CString(path));
- if (!fileExists(toImpl(pathRef.get())->string()))
- return 0;
-
- return new Ewk_Context(adoptWK(WKContextCreateWithInjectedBundlePath(pathRef.get())));
+ return Ewk_Context::create(String::fromUTF8(path)).leakRef();
}
Eina_Bool ewk_context_url_scheme_register(Ewk_Context* ewkContext, const char* scheme, Ewk_Url_Scheme_Request_Cb callback, void* userData)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, false);
EINA_SAFETY_ON_NULL_RETURN_VAL(scheme, false);
- EINA_SAFETY_ON_NULL_RETURN_VAL(callback, false);
- ewkContext->urlSchemeHandlers.set(String::fromUTF8(scheme), Ewk_Url_Scheme_Handler(callback, userData));
- WKRetainPtr<WKStringRef> wkScheme(AdoptWK, WKStringCreateWithUTF8CString(scheme));
- WKSoupRequestManagerRegisterURIScheme(ewkContext->requestManager.get(), wkScheme.get());
-
- return true;
+ return ewkContext->registerURLScheme(String::fromUTF8(scheme), callback, userData);
}
void ewk_context_vibration_client_callbacks_set(Ewk_Context* ewkContext, Ewk_Vibration_Client_Vibrate_Cb vibrate, Ewk_Vibration_Client_Vibration_Cancel_Cb cancel, void* data)
@@ -306,7 +343,7 @@ void ewk_context_vibration_client_callbacks_set(Ewk_Context* ewkContext, Ewk_Vib
EINA_SAFETY_ON_NULL_RETURN(ewkContext);
#if ENABLE(VIBRATION)
- ewkContext->vibrationProvider->setVibrationClientCallbacks(vibrate, cancel, data);
+ ewkContext->vibrationProvider()->setVibrationClientCallbacks(vibrate, cancel, data);
#endif
}
@@ -314,28 +351,22 @@ void ewk_context_history_callbacks_set(Ewk_Context* ewkContext, Ewk_History_Navi
{
EINA_SAFETY_ON_NULL_RETURN(ewkContext);
- ewkContext->historyClient.navigate_func = navigate;
- ewkContext->historyClient.client_redirect_func = clientRedirect;
- ewkContext->historyClient.server_redirect_func = serverRedirect;
- ewkContext->historyClient.title_update_func = titleUpdate;
- ewkContext->historyClient.populate_visited_links_func = populateVisitedLinks;
- ewkContext->historyClient.user_data = data;
+ Ewk_Context_History_Client& historyClient = ewkContext->historyClient();
+ historyClient.navigate_func = navigate;
+ historyClient.client_redirect_func = clientRedirect;
+ historyClient.server_redirect_func = serverRedirect;
+ historyClient.title_update_func = titleUpdate;
+ historyClient.populate_visited_links_func = populateVisitedLinks;
+ historyClient.user_data = data;
}
-const Ewk_Context_History_Client* ewk_context_history_client_get(const Ewk_Context* ewkContext)
-{
- EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, 0);
-
- return &ewkContext->historyClient;
-}
void ewk_context_visited_link_add(Ewk_Context* ewkContext, const char* visitedURL)
{
EINA_SAFETY_ON_NULL_RETURN(ewkContext);
EINA_SAFETY_ON_NULL_RETURN(visitedURL);
- WKRetainPtr<WKStringRef> wkVisitedURL(AdoptWK, WKStringCreateWithUTF8CString(visitedURL));
- WKContextAddVisitedLink(ewkContext->context.get(), wkVisitedURL.get());
+ ewkContext->addVisitedLink(visitedURL);
}
// Ewk_Cache_Model enum validation
@@ -346,14 +377,16 @@ COMPILE_ASSERT_MATCHING_ENUM(EWK_CACHE_MODEL_PRIMARY_WEBBROWSER, kWKCacheModelPr
Eina_Bool ewk_context_cache_model_set(Ewk_Context* ewkContext, Ewk_Cache_Model cacheModel)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, false);
- WKContextSetCacheModel(ewk_context_WKContext_get(ewkContext), static_cast<Ewk_Cache_Model>(cacheModel));
+
+ ewkContext->setCacheModel(cacheModel);
+
return true;
}
Ewk_Cache_Model ewk_context_cache_model_get(const Ewk_Context* ewkContext)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, EWK_CACHE_MODEL_DOCUMENT_VIEWER);
- WKCacheModel cacheModel = WKContextGetCacheModel(ewk_context_WKContext_get(ewkContext));
- return static_cast<Ewk_Cache_Model>(cacheModel);
+
+ return ewkContext->cacheModel();
}
diff --git a/Source/WebKit2/UIProcess/API/efl/ewk_context_download_client.cpp b/Source/WebKit2/UIProcess/API/efl/ewk_context_download_client.cpp
index 11647b41e..2fa86e9a7 100644
--- a/Source/WebKit2/UIProcess/API/efl/ewk_context_download_client.cpp
+++ b/Source/WebKit2/UIProcess/API/efl/ewk_context_download_client.cpp
@@ -50,7 +50,7 @@ static inline Ewk_Context* toEwkContext(const void* clientInfo)
static WKStringRef decideDestinationWithSuggestedFilename(WKContextRef, WKDownloadRef wkDownload, WKStringRef filename, bool* /*allowOverwrite*/, const void* clientInfo)
{
- Ewk_Download_Job* download = ewk_context_download_job_get(toEwkContext(clientInfo), toImpl(wkDownload)->downloadID());
+ Ewk_Download_Job* download = toEwkContext(clientInfo)->downloadJob(toImpl(wkDownload)->downloadID());
ASSERT(download);
download->setSuggestedFileName(toImpl(filename)->string().utf8().data());
@@ -67,14 +67,14 @@ static WKStringRef decideDestinationWithSuggestedFilename(WKContextRef, WKDownlo
static void didReceiveResponse(WKContextRef, WKDownloadRef wkDownload, WKURLResponseRef wkResponse, const void* clientInfo)
{
- Ewk_Download_Job* download = ewk_context_download_job_get(toEwkContext(clientInfo), toImpl(wkDownload)->downloadID());
+ Ewk_Download_Job* download = toEwkContext(clientInfo)->downloadJob(toImpl(wkDownload)->downloadID());
ASSERT(download);
download->setResponse(Ewk_Url_Response::create(wkResponse));
}
static void didCreateDestination(WKContextRef, WKDownloadRef wkDownload, WKStringRef /*path*/, const void* clientInfo)
{
- Ewk_Download_Job* download = ewk_context_download_job_get(toEwkContext(clientInfo), toImpl(wkDownload)->downloadID());
+ Ewk_Download_Job* download = toEwkContext(clientInfo)->downloadJob(toImpl(wkDownload)->downloadID());
ASSERT(download);
download->setState(EWK_DOWNLOAD_JOB_STATE_DOWNLOADING);
@@ -82,7 +82,7 @@ static void didCreateDestination(WKContextRef, WKDownloadRef wkDownload, WKStrin
static void didReceiveData(WKContextRef, WKDownloadRef wkDownload, uint64_t length, const void* clientInfo)
{
- Ewk_Download_Job* download = ewk_context_download_job_get(toEwkContext(clientInfo), toImpl(wkDownload)->downloadID());
+ Ewk_Download_Job* download = toEwkContext(clientInfo)->downloadJob(toImpl(wkDownload)->downloadID());
ASSERT(download);
download->incrementReceivedData(length);
}
@@ -90,35 +90,35 @@ static void didReceiveData(WKContextRef, WKDownloadRef wkDownload, uint64_t leng
static void didFail(WKContextRef, WKDownloadRef wkDownload, WKErrorRef error, const void* clientInfo)
{
uint64_t downloadId = toImpl(wkDownload)->downloadID();
- Ewk_Download_Job* download = ewk_context_download_job_get(toEwkContext(clientInfo), downloadId);
+ Ewk_Download_Job* download = toEwkContext(clientInfo)->downloadJob(downloadId);
ASSERT(download);
OwnPtr<Ewk_Error> ewkError = Ewk_Error::create(error);
download->setState(EWK_DOWNLOAD_JOB_STATE_FAILED);
ewk_view_download_job_failed(download->view(), download, ewkError.get());
- ewk_context_download_job_remove(toEwkContext(clientInfo), downloadId);
+ toEwkContext(clientInfo)->removeDownloadJob(downloadId);
}
static void didCancel(WKContextRef, WKDownloadRef wkDownload, const void* clientInfo)
{
uint64_t downloadId = toImpl(wkDownload)->downloadID();
- Ewk_Download_Job* download = ewk_context_download_job_get(toEwkContext(clientInfo), downloadId);
+ Ewk_Download_Job* download = toEwkContext(clientInfo)->downloadJob(downloadId);
ASSERT(download);
download->setState(EWK_DOWNLOAD_JOB_STATE_CANCELLED);
ewk_view_download_job_cancelled(download->view(), download);
- ewk_context_download_job_remove(toEwkContext(clientInfo), downloadId);
+ toEwkContext(clientInfo)->removeDownloadJob(downloadId);
}
static void didFinish(WKContextRef, WKDownloadRef wkDownload, const void* clientInfo)
{
uint64_t downloadId = toImpl(wkDownload)->downloadID();
- Ewk_Download_Job* download = ewk_context_download_job_get(toEwkContext(clientInfo), downloadId);
+ Ewk_Download_Job* download = toEwkContext(clientInfo)->downloadJob(downloadId);
ASSERT(download);
download->setState(EWK_DOWNLOAD_JOB_STATE_FINISHED);
ewk_view_download_job_finished(download->view(), download);
- ewk_context_download_job_remove(toEwkContext(clientInfo), downloadId);
+ toEwkContext(clientInfo)->removeDownloadJob(downloadId);
}
void ewk_context_download_client_attach(Ewk_Context* ewkContext)
@@ -136,7 +136,7 @@ void ewk_context_download_client_attach(Ewk_Context* ewkContext)
wkDownloadClient.didFail = didFail;
wkDownloadClient.didFinish = didFinish;
- WKContextSetDownloadClient(ewk_context_WKContext_get(ewkContext), &wkDownloadClient);
+ WKContextSetDownloadClient(ewkContext->wkContext(), &wkDownloadClient);
}
diff --git a/Source/WebKit2/UIProcess/API/efl/ewk_context_history_client.cpp b/Source/WebKit2/UIProcess/API/efl/ewk_context_history_client.cpp
index 1038b4df5..4f793b9d0 100644
--- a/Source/WebKit2/UIProcess/API/efl/ewk_context_history_client.cpp
+++ b/Source/WebKit2/UIProcess/API/efl/ewk_context_history_client.cpp
@@ -41,75 +41,70 @@
using namespace WebKit;
-static inline const Ewk_Context_History_Client* getEwkHistoryDelegate(const void* clientInfo)
+static inline const Ewk_Context_History_Client& getEwkHistoryClient(const void* clientInfo)
{
ASSERT(clientInfo);
- return ewk_context_history_client_get(static_cast<const Ewk_Context*>(clientInfo));
+ return static_cast<const Ewk_Context*>(clientInfo)->historyClient();
}
static void didNavigateWithNavigationData(WKContextRef, WKPageRef page, WKNavigationDataRef navigationData, WKFrameRef, const void* clientInfo)
{
- const Ewk_Context_History_Client* historyDelegate = getEwkHistoryDelegate(clientInfo);
- ASSERT(historyDelegate);
+ const Ewk_Context_History_Client& historyClient = getEwkHistoryClient(clientInfo);
- if (!historyDelegate->navigate_func)
+ if (!historyClient.navigate_func)
return;
RefPtr<Ewk_Navigation_Data> navigationDataEwk = Ewk_Navigation_Data::create(navigationData);
- historyDelegate->navigate_func(ewk_view_from_page_get(toImpl(page)), navigationDataEwk.get(), historyDelegate->user_data);
+ historyClient.navigate_func(ewk_view_from_page_get(toImpl(page)), navigationDataEwk.get(), historyClient.user_data);
}
static void didPerformClientRedirect(WKContextRef, WKPageRef page, WKURLRef sourceURL, WKURLRef destinationURL, WKFrameRef, const void* clientInfo)
{
- const Ewk_Context_History_Client* historyDelegate = getEwkHistoryDelegate(clientInfo);
- ASSERT(historyDelegate);
+ const Ewk_Context_History_Client& historyClient = getEwkHistoryClient(clientInfo);
- if (!historyDelegate->client_redirect_func)
+ if (!historyClient.client_redirect_func)
return;
WKEinaSharedString sourceURLString(sourceURL);
WKEinaSharedString destinationURLString(destinationURL);
- historyDelegate->client_redirect_func(ewk_view_from_page_get(toImpl(page)), sourceURLString, destinationURLString, historyDelegate->user_data);
+ historyClient.client_redirect_func(ewk_view_from_page_get(toImpl(page)), sourceURLString, destinationURLString, historyClient.user_data);
}
static void didPerformServerRedirect(WKContextRef, WKPageRef page, WKURLRef sourceURL, WKURLRef destinationURL, WKFrameRef, const void* clientInfo)
{
- const Ewk_Context_History_Client* historyDelegate = getEwkHistoryDelegate(clientInfo);
- ASSERT(historyDelegate);
+ const Ewk_Context_History_Client& historyClient = getEwkHistoryClient(clientInfo);
- if (!historyDelegate->server_redirect_func)
+ if (!historyClient.server_redirect_func)
return;
WKEinaSharedString sourceURLString(sourceURL);
WKEinaSharedString destinationURLString(destinationURL);
- historyDelegate->server_redirect_func(ewk_view_from_page_get(toImpl(page)), sourceURLString, destinationURLString, historyDelegate->user_data);
+ historyClient.server_redirect_func(ewk_view_from_page_get(toImpl(page)), sourceURLString, destinationURLString, historyClient.user_data);
}
static void didUpdateHistoryTitle(WKContextRef, WKPageRef page, WKStringRef title, WKURLRef URL, WKFrameRef, const void* clientInfo)
{
- const Ewk_Context_History_Client* historyDelegate = getEwkHistoryDelegate(clientInfo);
- ASSERT(historyDelegate);
+ const Ewk_Context_History_Client& historyClient = getEwkHistoryClient(clientInfo);
- if (!historyDelegate->title_update_func)
+ if (!historyClient.title_update_func)
return;
WKEinaSharedString titleString(title);
WKEinaSharedString stringURL(URL);
- historyDelegate->title_update_func(ewk_view_from_page_get(toImpl(page)), titleString, stringURL, historyDelegate->user_data);
+ historyClient.title_update_func(ewk_view_from_page_get(toImpl(page)), titleString, stringURL, historyClient.user_data);
}
static void populateVisitedLinks(WKContextRef, const void* clientInfo)
{
- const Ewk_Context_History_Client* historyDelegate = getEwkHistoryDelegate(clientInfo);
- ASSERT(historyDelegate);
+ const Ewk_Context_History_Client& historyClient = getEwkHistoryClient(clientInfo);
- if (!historyDelegate->populate_visited_links_func)
+ if (!historyClient.populate_visited_links_func)
return;
- historyDelegate->populate_visited_links_func(historyDelegate->user_data);
+ historyClient.populate_visited_links_func(historyClient.user_data);
}
void ewk_context_history_client_attach(Ewk_Context* ewkContext)
@@ -126,5 +121,5 @@ void ewk_context_history_client_attach(Ewk_Context* ewkContext)
wkHistoryClient.didUpdateHistoryTitle = didUpdateHistoryTitle;
wkHistoryClient.populateVisitedLinks = populateVisitedLinks;
- WKContextSetHistoryClient(ewk_context_WKContext_get(ewkContext), &wkHistoryClient);
+ WKContextSetHistoryClient(ewkContext->wkContext(), &wkHistoryClient);
}
diff --git a/Source/WebKit2/UIProcess/API/efl/ewk_context_private.h b/Source/WebKit2/UIProcess/API/efl/ewk_context_private.h
index 705739a16..489f05189 100644
--- a/Source/WebKit2/UIProcess/API/efl/ewk_context_private.h
+++ b/Source/WebKit2/UIProcess/API/efl/ewk_context_private.h
@@ -20,22 +20,87 @@
#ifndef ewk_context_private_h
#define ewk_context_private_h
-#include <WebKit2/WKBase.h>
+#include "WKAPICast.h"
+#include "WKRetainPtr.h"
+#include "ewk_context_history_client_private.h"
-typedef struct Ewk_Context Ewk_Context;
-typedef struct Ewk_Download_Job Ewk_Download_Job;
-typedef struct Ewk_Url_Scheme_Request Ewk_Url_Scheme_Request;
-typedef struct Ewk_Context_History_Client Ewk_Context_History_Client;
+class Ewk_Download_Job;
+class Ewk_Url_Scheme_Request;
+class Ewk_Cookie_Manager;
+class Ewk_Favicon_Database;
+#if ENABLE(BATTERY_STATUS)
+class BatteryProvider;
+#endif
+#if ENABLE(NETWORK_INFO)
+class NetworkInfoProvider;
+#endif
+#if ENABLE(VIBRATION)
+class VibrationProvider;
+#endif
-WKContextRef ewk_context_WKContext_get(const Ewk_Context*);
-Ewk_Context* ewk_context_new_from_WKContext(WKContextRef);
-WKSoupRequestManagerRef ewk_context_request_manager_get(const Ewk_Context*);
-void ewk_context_url_scheme_request_received(Ewk_Context*, Ewk_Url_Scheme_Request*);
+class Ewk_Context : public RefCounted<Ewk_Context> {
+public:
+ static PassRefPtr<Ewk_Context> create(WKContextRef context);
+ static PassRefPtr<Ewk_Context> create();
+ static PassRefPtr<Ewk_Context> create(const String& injectedBundlePath);
-void ewk_context_download_job_add(Ewk_Context*, Ewk_Download_Job*);
-Ewk_Download_Job* ewk_context_download_job_get(const Ewk_Context*, uint64_t downloadId);
-void ewk_context_download_job_remove(Ewk_Context*, uint64_t downloadId);
+ static PassRefPtr<Ewk_Context> defaultContext();
-const Ewk_Context_History_Client* ewk_context_history_client_get(const Ewk_Context*);
+ ~Ewk_Context();
+
+ Ewk_Cookie_Manager* cookieManager();
+
+ Ewk_Favicon_Database* faviconDatabase();
+
+ bool registerURLScheme(const String& scheme, Ewk_Url_Scheme_Request_Cb callback, void* userData);
+
+#if ENABLE(VIBRATION)
+ PassRefPtr<VibrationProvider> vibrationProvider();
+#endif
+
+ void addVisitedLink(const String& visitedURL);
+
+ void setCacheModel(Ewk_Cache_Model);
+
+ Ewk_Cache_Model cacheModel() const;
+
+ WKContextRef wkContext();
+
+ WKSoupRequestManagerRef requestManager();
+
+ void urlSchemeRequestReceived(Ewk_Url_Scheme_Request*);
+
+ void addDownloadJob(Ewk_Download_Job*);
+ Ewk_Download_Job* downloadJob(uint64_t downloadId);
+ void removeDownloadJob(uint64_t downloadId);
+
+ const Ewk_Context_History_Client& historyClient() const { return m_historyClient; }
+ Ewk_Context_History_Client& historyClient() { return m_historyClient; }
+
+private:
+ explicit Ewk_Context(WKContextRef);
+
+ WKRetainPtr<WKContextRef> m_context;
+
+ OwnPtr<Ewk_Cookie_Manager> m_cookieManager;
+ OwnPtr<Ewk_Favicon_Database> m_faviconDatabase;
+#if ENABLE(BATTERY_STATUS)
+ RefPtr<BatteryProvider> m_batteryProvider;
+#endif
+#if ENABLE(NETWORK_INFO)
+ RefPtr<NetworkInfoProvider> m_networkInfoProvider;
+#endif
+#if ENABLE(VIBRATION)
+ RefPtr<VibrationProvider> m_vibrationProvider;
+#endif
+ HashMap<uint64_t, RefPtr<Ewk_Download_Job> > m_downloadJobs;
+
+ WKRetainPtr<WKSoupRequestManagerRef> m_requestManager;
+
+ typedef HashMap<String, class Ewk_Url_Scheme_Handler> URLSchemeHandlerMap;
+ URLSchemeHandlerMap m_urlSchemeHandlers;
+
+ Ewk_Context_History_Client m_historyClient;
+};
#endif // ewk_context_private_h
diff --git a/Source/WebKit2/UIProcess/API/efl/ewk_context_request_manager_client.cpp b/Source/WebKit2/UIProcess/API/efl/ewk_context_request_manager_client.cpp
index b2573ca8e..fe801ce6b 100644
--- a/Source/WebKit2/UIProcess/API/efl/ewk_context_request_manager_client.cpp
+++ b/Source/WebKit2/UIProcess/API/efl/ewk_context_request_manager_client.cpp
@@ -41,7 +41,7 @@ static inline Ewk_Context* toEwkContext(const void* clientInfo)
static void didReceiveURIRequest(WKSoupRequestManagerRef soupRequestManagerRef, WKURLRef urlRef, WKPageRef, uint64_t requestID, const void* clientInfo)
{
RefPtr<Ewk_Url_Scheme_Request> schemeRequest = Ewk_Url_Scheme_Request::create(soupRequestManagerRef, urlRef, requestID);
- ewk_context_url_scheme_request_received(toEwkContext(clientInfo), schemeRequest.get());
+ toEwkContext(clientInfo)->urlSchemeRequestReceived(schemeRequest.get());
}
void ewk_context_request_manager_client_attach(Ewk_Context* context)
@@ -53,5 +53,5 @@ void ewk_context_request_manager_client_attach(Ewk_Context* context)
wkRequestManagerClient.clientInfo = context;
wkRequestManagerClient.didReceiveURIRequest = didReceiveURIRequest;
- WKSoupRequestManagerSetClient(ewk_context_request_manager_get(context), &wkRequestManagerClient);
+ WKSoupRequestManagerSetClient(context->requestManager(), &wkRequestManagerClient);
}
diff --git a/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp b/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp
index fc955ec82..e77751934 100644
--- a/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp
+++ b/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp
@@ -132,7 +132,7 @@ struct Ewk_View_Private_Data {
OwnPtr<Ewk_Settings> settings;
bool areMouseEventsEnabled;
WKRetainPtr<WKColorPickerResultListenerRef> colorPickerResultListener;
- Ewk_Context* context;
+ RefPtr<Ewk_Context> context;
#if ENABLE(TOUCH_EVENTS)
bool areTouchEventsEnabled;
#endif
@@ -152,7 +152,6 @@ struct Ewk_View_Private_Data {
Ewk_View_Private_Data()
: areMouseEventsEnabled(false)
- , context(0)
#if ENABLE(TOUCH_EVENTS)
, areTouchEventsEnabled(false)
#endif
@@ -171,7 +170,7 @@ struct Ewk_View_Private_Data {
~Ewk_View_Private_Data()
{
/* Unregister icon change callback */
- Ewk_Favicon_Database* iconDatabase = ewk_context_favicon_database_get(context);
+ Ewk_Favicon_Database* iconDatabase = context->faviconDatabase();
iconDatabase->unwatchChanges(_ewk_view_on_favicon_changed);
void* item;
@@ -477,7 +476,6 @@ static Ewk_View_Private_Data* _ewk_view_priv_new(Ewk_View_Smart_Data* smartData)
static void _ewk_view_priv_del(Ewk_View_Private_Data* priv)
{
- ewk_context_unref(priv->context);
delete priv;
}
@@ -795,7 +793,7 @@ static inline Evas_Smart* _ewk_view_smart_class_new(void)
return smart;
}
-static void _ewk_view_initialize(Evas_Object* ewkView, Ewk_Context* context, WKPageGroupRef pageGroupRef)
+static void _ewk_view_initialize(Evas_Object* ewkView, PassRefPtr<Ewk_Context> context, WKPageGroupRef pageGroupRef)
{
EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData);
EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv);
@@ -807,9 +805,9 @@ static void _ewk_view_initialize(Evas_Object* ewkView, Ewk_Context* context, WKP
priv->pageClient = PageClientImpl::create(ewkView);
if (pageGroupRef)
- priv->pageProxy = toImpl(ewk_context_WKContext_get(context))->createWebPage(priv->pageClient.get(), toImpl(pageGroupRef));
+ priv->pageProxy = toImpl(context->wkContext())->createWebPage(priv->pageClient.get(), toImpl(pageGroupRef));
else
- priv->pageProxy = toImpl(ewk_context_WKContext_get(context))->createWebPage(priv->pageClient.get(), WebPageGroup::create().get());
+ priv->pageProxy = toImpl(context->wkContext())->createWebPage(priv->pageClient.get(), WebPageGroup::create().get());
addToPageViewMap(ewkView);
@@ -822,7 +820,7 @@ static void _ewk_view_initialize(Evas_Object* ewkView, Ewk_Context* context, WKP
priv->backForwardList = Ewk_Back_Forward_List::create(toAPI(priv->pageProxy->backForwardList()));
priv->settings = adoptPtr(new Ewk_Settings(WKPageGroupGetPreferences(WKPageGetPageGroup(toAPI(priv->pageProxy.get())))));
- priv->context = ewk_context_ref(context);
+ priv->context = context;
#if USE(COORDINATED_GRAPHICS)
priv->pageViewportControllerClient = PageViewportControllerClientEfl::create(ewkView);
@@ -842,7 +840,7 @@ static void _ewk_view_initialize(Evas_Object* ewkView, Ewk_Context* context, WKP
priv->resourceLoadClient = ResourceLoadClientEfl::create(ewkView);
/* Listen for favicon changes */
- Ewk_Favicon_Database* iconDatabase = ewk_context_favicon_database_get(priv->context);
+ Ewk_Favicon_Database* iconDatabase = priv->context->faviconDatabase();
iconDatabase->watchChanges(IconChangeCallbackData(_ewk_view_on_favicon_changed, ewkView));
}
@@ -882,7 +880,7 @@ Evas_Object* ewk_view_base_add(Evas* canvas, WKContextRef contextRef, WKPageGrou
if (!ewkView)
return 0;
- _ewk_view_initialize(ewkView, ewk_context_new_from_WKContext(contextRef), pageGroupRef);
+ _ewk_view_initialize(ewkView, Ewk_Context::create(contextRef), pageGroupRef);
return ewkView;
}
@@ -904,6 +902,7 @@ Evas_Object* ewk_view_smart_add(Evas* canvas, Evas_Smart* smart, Ewk_Context* co
Evas_Object* ewk_view_add_with_context(Evas* canvas, Ewk_Context* context)
{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(context, 0);
return ewk_view_smart_add(canvas, _ewk_view_smart_class_new(), context);
}
@@ -917,7 +916,7 @@ Ewk_Context* ewk_view_context_get(const Evas_Object* ewkView)
EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData, 0);
EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv, 0);
- return priv->context;
+ return priv->context.get();
}
/**
@@ -1544,7 +1543,7 @@ void ewk_view_update_icon(Evas_Object* ewkView)
EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData);
EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv);
- Ewk_Favicon_Database* iconDatabase = ewk_context_favicon_database_get(priv->context);
+ Ewk_Favicon_Database* iconDatabase = priv->context->faviconDatabase();
ASSERT(iconDatabase);
priv->faviconURL = ewk_favicon_database_icon_url_get(iconDatabase, priv->url);