This patch is to add some APIs with callbacks into web context.
Change-Id: I689741cde29cc25cb52aea73542a474c1ce06140
$(extension_src_dir)/web-engine-chromium/tizen-web-engine-load-error.cpp \
$(extension_src_dir)/web-engine-chromium/tizen-web-engine-policy-decision.cpp \
$(extension_src_dir)/web-engine-chromium/tizen-web-engine-request-interceptor.cpp \
+ $(extension_src_dir)/web-engine-chromium/tizen-web-engine-security-origin.cpp \
$(extension_src_dir)/web-engine-chromium/tizen-web-engine-settings.cpp
/*
- * Copyright (c) 2020 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
#include "tizen-web-engine-context.h"
+#include "tizen-web-engine-security-origin.h"
#include <ewk_context.h>
#include <ewk_context_internal.h>
Dali::WebEngineContext::CacheModel TizenWebEngineContext::GetCacheModel() const
{
- return static_cast<Dali::WebEngineContext::CacheModel>(ewk_context_cache_model_get(ewkContext ));
+ return static_cast<Dali::WebEngineContext::CacheModel>(ewk_context_cache_model_get(ewkContext));
}
void TizenWebEngineContext::SetCacheModel(Dali::WebEngineContext::CacheModel cacheModel)
ewk_context_certificate_file_set(ewkContext, certificatePath.c_str());
}
-void TizenWebEngineContext::DeleteWebDatabase()
+void TizenWebEngineContext::DeleteAllWebDatabase()
{
ewk_context_web_database_delete_all(ewkContext);
}
-void TizenWebEngineContext::DeleteWebStorage()
+bool TizenWebEngineContext::GetWebDatabaseOrigins(Dali::WebEngineContext::WebEngineSecurityOriginAcquiredCallback callback)
+{
+ webSecurityOriginAcquiredCallback = callback;
+ return ewk_context_web_database_origins_get(ewkContext, &TizenWebEngineContext::OnSecurityOriginsAcquired, this);
+}
+
+bool TizenWebEngineContext::DeleteWebDatabase(WebEngineSecurityOrigin& origin)
+{
+ TizenWebEngineSecurityOrigin* engineOrigin = static_cast<TizenWebEngineSecurityOrigin*>(&origin);
+ return ewk_context_web_database_delete(ewkContext, engineOrigin->GetSecurityOrigin());
+}
+
+bool TizenWebEngineContext::GetWebStorageOrigins(Dali::WebEngineContext::WebEngineSecurityOriginAcquiredCallback callback)
+{
+ webSecurityOriginAcquiredCallback = callback;
+ return ewk_context_web_storage_origins_get(ewkContext, &TizenWebEngineContext::OnSecurityOriginsAcquired, this);
+}
+
+bool TizenWebEngineContext::GetWebStorageUsageForOrigin(WebEngineSecurityOrigin& origin, Dali::WebEngineContext::WebEngineStorageUsageAcquiredCallback callback)
+{
+ webStorageUsageAcquiredCallback = callback;
+ TizenWebEngineSecurityOrigin* engineOrigin = static_cast<TizenWebEngineSecurityOrigin*>(&origin);
+ return ewk_context_web_storage_usage_for_origin_get(ewkContext, engineOrigin->GetSecurityOrigin(), &TizenWebEngineContext::OnStorageUsageAcquired, this);
+}
+
+void TizenWebEngineContext::DeleteAllWebStorage()
{
ewk_context_web_storage_delete_all(ewkContext);
}
+bool TizenWebEngineContext::DeleteWebStorageOrigin(WebEngineSecurityOrigin& origin)
+{
+ TizenWebEngineSecurityOrigin* engineOrigin = static_cast<TizenWebEngineSecurityOrigin*>(&origin);
+ return ewk_context_web_storage_origin_delete(ewkContext, engineOrigin->GetSecurityOrigin());
+}
+
void TizenWebEngineContext::DeleteLocalFileSystem()
{
ewk_context_local_file_system_all_delete(ewkContext);
ewk_context_cache_clear(ewkContext);
}
+bool TizenWebEngineContext::DeleteApplicationCache(WebEngineSecurityOrigin& origin)
+{
+ TizenWebEngineSecurityOrigin* engineOrigin = static_cast<TizenWebEngineSecurityOrigin*>(&origin);
+ return ewk_context_application_cache_delete(ewkContext, engineOrigin->GetSecurityOrigin());
+}
+
+void TizenWebEngineContext::GetFormPasswordList(Dali::WebEngineContext::WebEngineFormPasswordAcquiredCallback callback)
+{
+ webFormPasswordAcquiredCallback = callback;
+ ewk_context_form_password_data_list_get(ewkContext, &TizenWebEngineContext::OnFormPasswordsAcquired, this);
+}
+
+void TizenWebEngineContext::RegisterDownloadStartedCallback(Dali::WebEngineContext::WebEngineDownloadStartedCallback callback)
+{
+ webDownloadStartedCallback = callback;
+ ewk_context_did_start_download_callback_set(ewkContext, &TizenWebEngineContext::OnDownloadStarted, this);
+}
+
+void TizenWebEngineContext::RegisterMimeOverriddenCallback(Dali::WebEngineContext::WebEngineMimeOverriddenCallback callback)
+{
+ webMimeOverriddenCallback = callback;
+ ewk_context_mime_override_callback_set(ewkContext, &TizenWebEngineContext::OnMimeOverridden, this);
+}
+
+void TizenWebEngineContext::OnSecurityOriginsAcquired(Eina_List* origins, void* userData)
+{
+ TizenWebEngineContext* pThis = static_cast<TizenWebEngineContext*>(userData);
+ std::vector<std::unique_ptr<Dali::WebEngineSecurityOrigin>> originsList;
+
+ Eina_List* it = nullptr;
+ void* data = nullptr;
+ EINA_LIST_FOREACH(origins, it, data)
+ {
+ if (data)
+ {
+ Ewk_Security_Origin* securityOrigin = static_cast<Ewk_Security_Origin*>(data);
+ std::unique_ptr<Dali::WebEngineSecurityOrigin> origin(new TizenWebEngineSecurityOrigin(securityOrigin));
+ originsList.push_back(std::move(origin));
+ }
+ }
+
+ pThis->webSecurityOriginAcquiredCallback(originsList);
+}
+
+void TizenWebEngineContext::OnStorageUsageAcquired(uint64_t usage, void* userData)
+{
+ TizenWebEngineContext* pThis = static_cast<TizenWebEngineContext*>(userData);
+ pThis->webStorageUsageAcquiredCallback(usage);
+}
+
+void TizenWebEngineContext::OnFormPasswordsAcquired(Eina_List* list, void* userData)
+{
+ TizenWebEngineContext* pThis = static_cast<TizenWebEngineContext*>(userData);
+ std::vector<std::unique_ptr<Dali::WebEngineContext::PasswordData>> passwordDataList;
+
+ Eina_List* it = nullptr;
+ void* data = nullptr;
+ EINA_LIST_FOREACH(list, it, data)
+ {
+ if (data)
+ {
+ Ewk_Password_Data* ewkPassword = static_cast<Ewk_Password_Data*>(data);
+ std::unique_ptr<Dali::WebEngineContext::PasswordData> passwordData(new Dali::WebEngineContext::PasswordData());
+ passwordData->url = ewkPassword->url;
+ passwordData->useFingerprint = ewkPassword->useFingerprint;
+ passwordDataList.push_back(std::move(passwordData));
+ }
+ }
+
+ pThis->webFormPasswordAcquiredCallback(passwordDataList);
+}
+
+void TizenWebEngineContext::OnDownloadStarted(const char* downloadUrl, void* userData)
+{
+ TizenWebEngineContext* pThis = static_cast<TizenWebEngineContext*>(userData);
+ pThis->webDownloadStartedCallback(downloadUrl);
+}
+
+Eina_Bool TizenWebEngineContext::OnMimeOverridden(const char* url, const char* defaultMime, char** newMime, void* userData)
+{
+ TizenWebEngineContext* pThis = static_cast<TizenWebEngineContext*>(userData);
+ std::string newOverridingMime;
+ bool result = pThis->webMimeOverriddenCallback(url, defaultMime, newOverridingMime);
+ if (result)
+ {
+ // this memory would be freed by chromium-efl if mime-overridden-callback returns true.
+ *newMime = strdup(newOverridingMime.c_str());
+ }
+ return result;
+}
+
} // namespace Plugin
} // namespace Dali
#define DALI_PLUGIN_WEB_ENGINE_CONTEXT_H
/*
- * Copyright (c) 2020 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
// EXTERNAL INCLUDES
-#include <string>
#include <dali/devel-api/adaptor-framework/web-engine-context.h>
+#include <eina_list.h>
+#include <string>
struct Ewk_Context;
~TizenWebEngineContext();
/**
- * @brief Returns the cache model type.
- *
- * @return #Dali::WebEngineContext::CacheModel
+ * @copydoc Dali::WebEngineContext::GetCacheModel()
*/
CacheModel GetCacheModel() const override;
/**
- * @brief Requests to set the cache model.
- *
- * @param[in] cacheModel The cache model
+ * @copydoc Dali::WebEngineContext::SetCacheModel()
*/
void SetCacheModel(CacheModel cacheModel) override;
/**
- * @brief Sets the given proxy URI to network backend of specific context.
- *
- * @param[in] uri, proxy URI to set
+ * @copydoc Dali::WebEngineContext::SetProxyUri()
*/
void SetProxyUri(const std::string& uri) override;
/**
- * @brief Sets a proxy auth credential to network backend of specific context.
- *
- * @details Normally, proxy auth credential should be got from the callback
- * set by ewk_view_authentication_callback_set, once the username in
- * this API has been set with a non-null value, the authentication
- * callback will never been invoked. Try to avoid using this API.
- *
- * @param[in] username username to set
- * @param[in] password password to set
+ * @copydoc Dali::WebEngineContext::SetDefaultProxyAuth()
*/
void SetDefaultProxyAuth(const std::string& username, const std::string& password) override;
/**
- * @brief Adds CA certificates to persistent NSS certificate database
- *
- * Function accepts a path to a CA certificate file, a path to a directory
- * containing CA certificate files, or a colon-seprarated list of those.
- *
- * Certificate files should have *.crt extension.
- *
- * Directories are traversed recursively.
- *
- * @param[in] certificatePath path to a CA certificate file(s), see above for details
+ * @copydoc Dali::WebEngineContext::SetCertificateFilePath()
*/
void SetCertificateFilePath(const std::string& certificatePath) override;
/**
- * @brief Requests for deleting all web databases.
+ * @copydoc Dali::WebEngineContext::DeleteAllWebDatabase()
*/
- void DeleteWebDatabase() override;
+ void DeleteAllWebDatabase() override;
/**
- * @brief Deletes web storage.
- *
- * @details This function does not ensure that all data will be removed.
- * Should be used to extend free physical memory.
- *
- * @param[in] context Context object
+ * @copydoc Dali::WebEngineContext::GetWebDatabaseOrigins()
*/
- void DeleteWebStorage() override;
+ bool GetWebDatabaseOrigins(WebEngineSecurityOriginAcquiredCallback callback) override;
/**
- * @brief Requests for deleting all local file systems.
+ * @copydoc Dali::WebEngineContext::DeleteWebDatabase()
+ */
+ bool DeleteWebDatabase(WebEngineSecurityOrigin& origin) override;
+
+ /**
+ * @copydoc Dali::WebEngineContext::GetWebStorageOrigins()
+ */
+ bool GetWebStorageOrigins(WebEngineSecurityOriginAcquiredCallback callback) override;
+
+ /**
+ * @copydoc Dali::WebEngineContext::GetWebStorageUsageForOrigin()
+ */
+ bool GetWebStorageUsageForOrigin(WebEngineSecurityOrigin& origin, WebEngineStorageUsageAcquiredCallback callback);
+
+ /**
+ * @copydoc Dali::WebEngineContext::DeleteAllWebStorage()
+ */
+ void DeleteAllWebStorage() override;
+
+ /**
+ * @copydoc Dali::WebEngineContext::DeleteWebStorageOrigin()
+ */
+ bool DeleteWebStorageOrigin(WebEngineSecurityOrigin& origin) override;
+
+ /**
+ * @copydoc Dali::WebEngineContext::DeleteLocalFileSystem()
*/
void DeleteLocalFileSystem() override;
/**
- * @brief Toggles the cache to be enabled or disabled
- *
- * Function works asynchronously.
- * By default the cache is disabled resulting in not storing network data on disk.
- *
- * @param[in] cacheDisabled enable or disable cache
+ * @copydoc Dali::WebEngineContext::DisableCache()
*/
void DisableCache(bool cacheDisabled) override;
/**
- * @brief Requests to clear cache
+ * @copydoc Dali::WebEngineContext::ClearCache()
*/
void ClearCache() override;
+ /**
+ * @copydoc Dali::WebEngineContext::DeleteApplicationCache()
+ */
+ bool DeleteApplicationCache(WebEngineSecurityOrigin& origin) override;
+
+ /**
+ * @copydoc Dali::WebEngineContext::GetFormPasswordList()
+ */
+ void GetFormPasswordList(WebEngineFormPasswordAcquiredCallback callback) override;
+
+ /**
+ * @copydoc Dali::WebEngineContext::RegisterDownloadStartedCallback()
+ */
+ void RegisterDownloadStartedCallback(WebEngineDownloadStartedCallback callback) override;
+
+ /**
+ * @copydoc Dali::WebEngineContext::RegisterMimeOverriddenCallback()
+ */
+ void RegisterMimeOverriddenCallback(WebEngineMimeOverriddenCallback callback) override;
+
+private:
+ /**
+ * @brief Callback for getting security origins.
+ *
+ * @param[in] origins security origins list
+ * @param[in] data data for callback
+ */
+ static void OnSecurityOriginsAcquired(Eina_List* origins, void* data);
+
+ /**
+ * @brief Callback for getting storage.
+ *
+ * @param[in] usage usage for storage
+ * @param[in] data data for callback
+ */
+ static void OnStorageUsageAcquired(uint64_t usage, void* data);
+
+ /**
+ * @brief Callback for getting form passwords.
+ *
+ * @param[in] list list for form password
+ * @param[in] data data for callback
+ */
+ static void OnFormPasswordsAcquired(Eina_List* list, void* data);
+
+ /**
+ * @brief Callback for download started.
+ *
+ * @param[in] downloadUrl url to download
+ * @param[in] data data for callback
+ */
+ static void OnDownloadStarted(const char* downloadUrl, void* data);
+
+ /**
+ * @brief Callback for overriding default mime type.
+ *
+ * @param[in] url url for which the mime type can be overridden
+ * @param[in] mime current mime type
+ * @param[out] newMime a new mime type for url
+ * @param[in] data data for callback
+ *
+ * @return true in case mime should be overridden by the contents of new mime,
+ * false otherwise.
+ */
+ static Eina_Bool OnMimeOverridden(const char* url, const char* mime, char** newMime, void* data);
+
private:
+ WebEngineSecurityOriginAcquiredCallback webSecurityOriginAcquiredCallback;
+ WebEngineStorageUsageAcquiredCallback webStorageUsageAcquiredCallback;
+ WebEngineFormPasswordAcquiredCallback webFormPasswordAcquiredCallback;
+ WebEngineDownloadStartedCallback webDownloadStartedCallback;
+ WebEngineMimeOverriddenCallback webMimeOverriddenCallback;
+
Ewk_Context* ewkContext;
};
--- /dev/null
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "tizen-web-engine-security-origin.h"
+
+namespace Dali
+{
+namespace Plugin
+{
+
+TizenWebEngineSecurityOrigin::TizenWebEngineSecurityOrigin(Ewk_Security_Origin* origin)
+ : ewkSecurityOrigin(origin)
+{
+}
+
+TizenWebEngineSecurityOrigin::~TizenWebEngineSecurityOrigin()
+{
+}
+
+std::string TizenWebEngineSecurityOrigin::GetHost() const
+{
+ return ewk_security_origin_host_get(ewkSecurityOrigin);
+}
+
+std::string TizenWebEngineSecurityOrigin::GetProtocol() const
+{
+ return ewk_security_origin_protocol_get(ewkSecurityOrigin);
+}
+
+Ewk_Security_Origin* TizenWebEngineSecurityOrigin::GetSecurityOrigin() const
+{
+ return ewkSecurityOrigin;
+}
+
+} // namespace Plugin
+} // namespace Dali
--- /dev/null
+#ifndef DALI_PLUGIN_TIZEN_WEB_ENGINE_SECURITY_ORIGIN_H
+#define DALI_PLUGIN_TIZEN_WEB_ENGINE_SECURITY_ORIGIN_H
+
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// EXTERNAL INCLUDES
+#include <ewk_security_origin.h>
+#include <string>
+
+#include <dali/devel-api/adaptor-framework/web-engine-security-origin.h>
+
+namespace Dali
+{
+namespace Plugin
+{
+
+/**
+ * @brief A class TizenWebEngineSecurityOrigin for security origin.
+ */
+class TizenWebEngineSecurityOrigin : public Dali::WebEngineSecurityOrigin
+{
+public:
+ /**
+ * @brief Constructor.
+ */
+ TizenWebEngineSecurityOrigin(Ewk_Security_Origin*);
+
+ /**
+ * @brief Destructor.
+ */
+ ~TizenWebEngineSecurityOrigin();
+
+ /**
+ * @copydoc Dali::WebEngineSecurityOrigin::GetHost()
+ */
+ std::string GetHost() const override;
+
+ /**
+ * @copydoc Dali::WebEngineSecurityOrigin::GetProtocol()
+ */
+ std::string GetProtocol() const override;
+
+ /**
+ * @brief Get security origin.
+ *
+ * @return origin pointer.
+ */
+ Ewk_Security_Origin* GetSecurityOrigin() const;
+
+private:
+ Ewk_Security_Origin* ewkSecurityOrigin;
+};
+
+} // namespace Plugin
+} // namespace Dali
+
+#endif // DALI_PLUGIN_TIZEN_WEB_ENGINE_SECURITY_ORIGIN_H
#include <dali/devel-api/adaptor-framework/web-engine-back-forward-list.h>
#include <dali/devel-api/adaptor-framework/web-engine-context.h>
#include <dali/devel-api/adaptor-framework/web-engine-cookie-manager.h>
+#include <dali/devel-api/adaptor-framework/web-engine-security-origin.h>
#include <dali/devel-api/adaptor-framework/web-engine-settings.h>
#include <dali/devel-api/common/stage.h>
#include <dali/integration-api/debug.h>
{
keyValue = LWE::KeyValue::GreaterThanSignKey;
}
- else {
+ else
+ {
keyValue = LWE::KeyValue::PeriodKey;
}
}
{
keyValue = LWE::KeyValue::QuestionMarkKey;
}
- else {
+ else
+ {
keyValue = LWE::KeyValue::SlashKey;
}
}
void SetProxyUri(const std::string& uri) override {}
void SetDefaultProxyAuth(const std::string& username, const std::string& password) override {}
void SetCertificateFilePath(const std::string& certificatePath) override {}
- void DeleteWebDatabase() override {}
- void DeleteWebStorage() override {}
+ void DeleteAllWebDatabase() override {}
+ bool GetWebDatabaseOrigins(WebEngineSecurityOriginAcquiredCallback callback) override
+ {
+ return false;
+ }
+ bool DeleteWebDatabase(WebEngineSecurityOrigin &origin) override
+ {
+ return false;
+ }
+ bool GetWebStorageOrigins(WebEngineSecurityOriginAcquiredCallback callback) override
+ {
+ return false;
+ }
+ bool GetWebStorageUsageForOrigin(WebEngineSecurityOrigin &origin, WebEngineStorageUsageAcquiredCallback callback) override
+ {
+ return false;
+ }
+ void DeleteAllWebStorage() override {}
+ bool DeleteWebStorageOrigin(WebEngineSecurityOrigin &origin) override
+ {
+ return false;
+ }
void DeleteLocalFileSystem() override {}
void DisableCache(bool cacheDisabled) override {}
void ClearCache() override {}
+ bool DeleteApplicationCache(WebEngineSecurityOrigin &origin) override
+ {
+ return false;
+ }
+ void GetFormPasswordList(WebEngineFormPasswordAcquiredCallback callback) override {}
+ void RegisterDownloadStartedCallback(WebEngineDownloadStartedCallback callback) override {}
+ void RegisterMimeOverriddenCallback(WebEngineMimeOverriddenCallback callback) override {}
};
Dali::WebEngineContext& TizenWebEngineLWE::GetContext() const
return false;
}
-bool TizenWebEngineLWE::HighlightText(const std::string& text, Dali::WebEnginePlugin::FindOption options,
- uint32_t maxMatchCount)
+bool TizenWebEngineLWE::HighlightText(const std::string& text, Dali::WebEnginePlugin::FindOption options, uint32_t maxMatchCount)
{
// NOT IMPLEMENTED
return false;
return Dali::PixelData();
}
-bool TizenWebEngineLWE::GetScreenshotAsynchronously(Dali::Rect<int> viewArea, float scaleFactor,
- Dali::WebEnginePlugin::ScreenshotCapturedCallback callback)
+bool TizenWebEngineLWE::GetScreenshotAsynchronously(Dali::Rect<int> viewArea, float scaleFactor, Dali::WebEnginePlugin::ScreenshotCapturedCallback callback)
{
// NOT IMPLEMENTED
return false;