Migrate patches for ewk APIs 2/2.
References:
https://review.tizen.org/gerrit/c/280052/
https://review.tizen.org/gerrit/c/281861/
Change-Id: Id06a021ac3052646e53a8dd3783edb099d2a32b2
Signed-off-by: Ayush Kumar <ayush.k123@samsung.com>
Profile* GetLastProfileMac();
+#if BUILDFLAG(IS_EFL)
+class ScopedAllowWaitForLegacyWebViewApi;
+#endif
+
namespace android_webview {
class AwFormDatabaseService;
class CookieManager;
friend class ui::DrmThreadProxy;
friend class viz::HostGpuMemoryBufferManager;
friend class vr::VrShell;
+#if BUILDFLAG(IS_EFL)
+ friend class ::ScopedAllowWaitForLegacyWebViewApi;
+#endif
// Usage that should be fixed:
friend class ::chromeos::BlockingMethodCaller; // http://crbug.com/125360
-// Copyright 2014 Samsung Electronics. All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Samsung Electronics nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+/*
+ * Copyright (C) 2016 Samsung Electronics.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/*
+ * Copyright (C) 2014-2016 Samsung Electronics. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
return gfx::Size(width, height);
}
+#if BUILDFLAG(IS_TIZEN_TV)
+void RWHVAuraOffscreenHelperEfl::DrawLabel(Evas_Object* image,
+ Eina_Rectangle rect) {
+ // check view boundary
+ if (rect.x < 0 || rect.y < 0 || rect.x > GetViewBoundsInPix().width() ||
+ rect.y > GetViewBoundsInPix().height())
+ return;
+
+ evas_object_move(image, rect.x, rect.y);
+ evas_object_show(image);
+
+ voice_manager_labels_.push_back(image);
+}
+
+void RWHVAuraOffscreenHelperEfl::ClearLabels() {
+ for (size_t i = 0; i < voice_manager_labels_.size(); i++) {
+ evas_object_hide(voice_manager_labels_[i]);
+ evas_object_del(voice_manager_labels_[i]);
+ }
+ voice_manager_labels_.clear();
+}
+#endif
+
void RWHVAuraOffscreenHelperEfl::OnGetFocusedNodeBounds(
const gfx::RectF& rect) {
web_contents_->GetDelegate()->OnDidChangeFocusedNodeBounds(rect);
gfx::Size GetPhysicalBackingSize() const;
void OnGetFocusedNodeBounds(const gfx::RectF& rect);
+ bool GetHorizontalPanningHold() const { return horizontal_panning_hold_; }
+ void SetHorizontalPanningHold(bool hold) { horizontal_panning_hold_ = hold; }
+ bool GetVerticalPanningHold() const { return vertical_panning_hold_; }
+ void SetVerticalPanningHold(bool hold) { vertical_panning_hold_ = hold; }
+
+#if BUILDFLAG(IS_TIZEN_TV)
+ void DrawLabel(Evas_Object* image, Eina_Rectangle rect);
+ void ClearLabels();
+#endif
+
gfx::Rect GetViewBoundsInPix() const;
const gfx::Size GetScrollableSize() const;
void SetScaledContentSize(const gfx::SizeF& size) {
bool radio_or_checkbox_focused_ = false;
int password_input_minlength_ = -1;
int input_maxlength_ = DEFAULT_MAX_LENGTH;
+ std::vector<Evas_Object*> voice_manager_labels_;
#endif
bool is_focused_node_editable_ = false;
bool is_scrolling_needed_ = false;
base::IDMap<std::unique_ptr<ScreenshotCapturedCallback>>
screen_capture_cb_map_;
+ bool horizontal_panning_hold_ = false;
+ bool vertical_panning_hold_ = false;
+
OnFocusCallback on_focus_in_callback_;
OnFocusCallback on_focus_out_callback_;
// added in the public API, and no new uses of this will be allowed.
class ScopedAllowWaitForLegacyWebViewApi {
private:
- base::ThreadRestrictions::ScopedAllowWait wait;
+ base::ScopedAllowBaseSyncPrimitivesOutsideBlockingScope allow_wait;
};
#endif // TIZEN_WEBVIEW_BROWSER_SCOPED_ALLOW_WAIT_FOR_LEGACY_WEB_VIEW_API_H
std::unique_ptr<ZoomLevelDelegate> CreateZoomLevelDelegate(
const base::FilePath& partition_path);
+#if BUILDFLAG(IS_TIZEN)
+ void SetOffTheRecord(bool incognito) { incognito_ = incognito; }
+#endif
+
// These methods map to Add methods in visitedlink::VisitedLinkMaster.
void AddVisitedURLs(const std::vector<GURL>& urls);
base::ScopedTempDir temp_dir_;
bool temp_dir_creation_attempted_;
std::unique_ptr<PrefService> user_pref_service_;
- const bool incognito_;
+ bool incognito_;
std::unique_ptr<net::NetworkDelegate> network_delegate_for_getter_;
std::unique_ptr<SSLHostStateDelegateEfl> ssl_host_state_delegate_;
std::unique_ptr<BackgroundSyncController> background_sync_controller_;
#include "base/stl_util.h"
#include "base/synchronization/waitable_event.h"
#include "base/task/thread_pool.h"
+#include "browser/scoped_allow_wait_for_legacy_web_view_api.h"
#include "browser_context_efl.h"
#include "content/browser/storage_partition_impl.h"
#include "content/public/browser/browser_task_traits.h"
base::BindOnce(GetCookieValueOnIOThread, cookie_store, GURL(url),
&cookie_value, &completion));
// allow wait temporarily.
+ ScopedAllowWaitForLegacyWebViewApi allow_wait;
completion.Wait();
return cookie_value;
}
#include "components/autofill/core/browser/webdata/autofill_webdata_service.h"
#include "components/password_manager/core/browser/password_form.h"
#include "components/password_manager/core/browser/password_store.h"
+#include "components/services/storage/public/cpp/buckets/bucket_locator.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
DCHECK(user_data_);
}
- void Dispatch(const std::vector<content::StorageUsageInfo>& local_storage) {
+ void Dispatch(const std::vector<content::StorageUsageInfo>& infos) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
Eina_List* lorigins = NULL;
std::vector<content::StorageUsageInfo>::const_iterator it;
- for (it = local_storage.begin(); it != local_storage.end(); it++) {
+ for (it = infos.begin(); it != infos.end(); it++) {
_Ewk_Security_Origin* origin =
new _Ewk_Security_Origin(it->storage_key.origin().GetURL());
lorigins = eina_list_append(lorigins, origin);
base::BindOnce(callback, origin_list, user_data));
}
+void OnGetWebDBUsageForOrigin(Ewk_Web_Database_Usage_Get_Callback callback,
+ void* user_data,
+ int64_t usage) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ callback(usage, user_data);
+}
+
void OnGetFileSystemOrigins(
storage::FileSystemQuotaClient* client,
Ewk_Local_File_System_Origins_Get_Callback callback,
#endif
}
+void EWebContext::GetLocalStorageUsageForOrigin(
+ const GURL& origin,
+ Ewk_Web_Storage_Usage_Get_Callback callback,
+ void* user_data) {
+ content::StoragePartition* partition =
+ browser_context_->GetStoragePartition(NULL);
+
+ partition->GetDOMStorageContext()->GetLocalStorageUsage(
+ base::BindOnce(&EWebContext::LocalStorageUsageForOrigin, origin,
+ base::Unretained(callback), base::Unretained(user_data)));
+}
+
+void EWebContext::LocalStorageUsageForOrigin(
+ const GURL& origin,
+ Ewk_Web_Storage_Usage_Get_Callback callback,
+ void* user_data,
+ const std::vector<content::StorageUsageInfo>& infos) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+ for (const auto& elem : infos) {
+ if (elem.storage_key.origin() == url::Origin::Create(origin)) {
+ callback(elem.total_size_bytes, user_data);
+ return;
+ }
+ }
+ callback(0, user_data);
+}
+
void EWebContext::WebStorageDelete() {
if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
base::ThreadPool::PostTask(
callback, user_data));
}
+void EWebContext::GetWebDBUsageForOrigin(
+ const GURL& origin,
+ Ewk_Web_Database_Usage_Get_Callback callback,
+ void* user_data) {
+ content::StoragePartition* partition =
+ browser_context()->GetDefaultStoragePartition();
+ if (!partition)
+ return;
+ auto client = std::make_unique<storage::DatabaseQuotaClient>(
+ *partition->GetDatabaseTracker());
+ client->GetBucketUsage(
+ storage::BucketLocator(
+ storage::BucketId::FromUnsafeValue(0),
+ blink::StorageKey::CreateFromStringForTesting(origin.spec()),
+ blink::mojom::StorageType::kTemporary, false),
+ base::BindOnce(&OnGetWebDBUsageForOrigin, callback, user_data));
+}
+
void EWebContext::FileSystemDelete(const GURL& host) {
if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
base::ThreadPool::PostTask(FROM_HERE, {BrowserThread::UI},
namespace content {
class BrowserContextEfl;
+struct StorageUsageInfo;
}
class EWebContextNotificationCallback {
const GURL& url,
Ewk_Web_Application_Cache_Usage_For_Origin_Get_Callback callback,
void* user_data);
+ void GetLocalStorageUsageForOrigin(
+ const GURL& origin,
+ Ewk_Web_Storage_Usage_Get_Callback callback,
+ void* user_data);
void GetAllOriginsWithWebDB(Ewk_Web_Database_Origins_Get_Callback callback, void* user_data);
void WebDBDelete(const GURL& host);
+ void GetWebDBUsageForOrigin(const GURL& origin,
+ Ewk_Web_Database_Usage_Get_Callback callback,
+ void* user_data);
void IndexedDBDelete();
void WebStorageDelete();
void WebStorageDeleteForOrigin(const GURL& origin);
EWebContext(bool incognito, const std::string& injectedBundlePath);
~EWebContext();
friend class Ewk_Context;
+ static void LocalStorageUsageForOrigin(
+ const GURL& origin,
+ Ewk_Web_Storage_Usage_Get_Callback callback,
+ void* user_data,
+ const std::vector<content::StorageUsageInfo>& infos);
std::unique_ptr<WebCacheManagerEfl> web_cache_manager_;
std::unique_ptr<content::BrowserContextEfl> browser_context_;
#include "base/json/json_string_value_serializer.h"
#include "base/logging.h"
#include "base/pickle.h"
+#include "base/strings/escape.h"
#include "base/strings/utf_string_conversions.h"
#include "base/task/task_runner_util.h"
#include "browser/javascript_dialog_manager_efl.h"
// because WebContents depends on BrowserContext which
// is deleted along with EwkContext.
CHECK(!web_contents_);
- if (old_context_.get()) {
- Ewk_Context::Delete(context_.get());
- context_ = old_context_;
- old_context_ = nullptr;
- }
permission_popup_manager_.reset();
- if (context_->GetImpl()->browser_context()->IsOffTheRecord())
- Ewk_Context::Delete(context_.get());
gin_native_bridge_dispatcher_host_.reset();
if (evas_object_) {
return true;
}
+void EWebView::set_magnifier(bool status) {
+#if !defined(USE_AURA)
+ rwhv()->set_magnifier(status);
+#endif
+}
+
+#if BUILDFLAG(IS_TIZEN)
bool EWebView::SetPrivateBrowsing(bool incognito) {
if (context_->GetImpl()->browser_context()->IsOffTheRecord() == incognito)
return false;
-
- GURL url = web_contents_->GetVisibleURL();
- if (old_context_.get()) {
- DCHECK(!incognito);
- web_contents_.reset();
- web_contents_delegate_.reset();
- Ewk_Context::Delete(context_.get());
- context_ = old_context_;
- old_context_ = nullptr;
- } else {
- if (incognito) {
- old_context_ = context_;
- }
- context_ = Ewk_Context::Create(incognito);
- }
-
- InitializeContent();
- SetURL(url);
+ context_->GetImpl()->browser_context()->SetOffTheRecord(incognito);
return true;
}
bool EWebView::GetPrivateBrowsing() const {
return context_->GetImpl()->browser_context()->IsOffTheRecord();
}
-
-void EWebView::set_magnifier(bool status) {
-#if !defined(USE_AURA)
- rwhv()->set_magnifier(status);
#endif
-}
const char* EWebView::GetUserAgent() const {
std::string user_agent =
url_str.append(";charset=");
url_str.append(encoding);
url_str.append(",");
- url_str.append(str_data);
+
+ // GURL constructor performs canonicalization of url string, but this is not
+ // enough for correctly escaping contents of "data:" url.
+ url_str.append(base::EscapeUrlEncodedData(str_data, false));
NavigationController::LoadURLParams data_params(GURL(url_str.c_str()));
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
RenderViewHost* render_view_host = web_contents_->GetRenderViewHost();
- DCHECK(render_view_host);
if (render_view_host) {
// We wait on UI thread till hit test data is updated.
return new _Ewk_Hit_Test(hit_test_params_);
}
- return NULL;
+ return nullptr;
}
void EWebView::EvasToBlinkCords(int x, int y, int* view_x, int* view_y) {
}
}
+bool EWebView::GetHorizontalPanningHold() const {
+ if (!rwhva())
+ return false;
+ return rwhva()->offscreen_helper()->GetHorizontalPanningHold();
+}
+
+void EWebView::SetHorizontalPanningHold(bool hold) {
+ if (rwhva())
+ rwhva()->offscreen_helper()->SetHorizontalPanningHold(hold);
+}
+
+bool EWebView::GetVerticalPanningHold() const {
+ if (!rwhva())
+ return false;
+ return rwhva()->offscreen_helper()->GetVerticalPanningHold();
+}
+
+void EWebView::SetVerticalPanningHold(bool hold) {
+ if (rwhva())
+ rwhva()->offscreen_helper()->SetVerticalPanningHold(hold);
+}
+
void EWebView::SendDelayedMessages(RenderViewHost* render_view_host) {
DCHECK(render_view_host);
}
}
+void EWebView::SetDidChangeThemeColorCallback(
+ Ewk_View_Did_Change_Theme_Color_Callback callback,
+ void* user_data) {
+ did_change_theme_color_callback_.Set(callback, user_data);
+}
+
+void EWebView::DidChangeThemeColor(const SkColor& color) {
+ did_change_theme_color_callback_.Run(evas_object_, color);
+}
+
+#if BUILDFLAG(IS_TIZEN_TV)
+void EWebView::DrawLabel(Evas_Object* image, Eina_Rectangle rect) {
+ if (rwhva())
+ rwhva()->offscreen_helper()->DrawLabel(image, rect);
+}
+
+void EWebView::ClearLabels() {
+ if (rwhva())
+ rwhva()->offscreen_helper()->ClearLabels();
+}
+#endif
+
void EWebView::RequestManifest(Ewk_View_Request_Manifest_Callback callback,
void* user_data) {
web_contents_delegate_->RequestManifestInfo(callback, user_data);
void* user_data_;
};
+class DidChangeThemeColorCallback {
+ public:
+ DidChangeThemeColorCallback() : callback_(nullptr), user_data_(nullptr) {}
+ void Set(Ewk_View_Did_Change_Theme_Color_Callback callback, void* user_data) {
+ callback_ = callback;
+ user_data_ = user_data;
+ }
+ void Run(Evas_Object* o, const SkColor& color) {
+ if (callback_)
+ callback_(o, SkColorGetR(color), SkColorGetG(color), SkColorGetB(color),
+ SkColorGetA(color), user_data_);
+ }
+
+ private:
+ Ewk_View_Did_Change_Theme_Color_Callback callback_;
+ void* user_data_;
+};
+
class WebViewAsyncRequestHitTestDataCallback;
class JavaScriptDialogManagerEfl;
class PermissionPopupManager;
void* userdata);
bool SetUserAgent(const char* userAgent);
bool SetUserAgentAppName(const char* application_name);
+#if BUILDFLAG(IS_TIZEN)
bool SetPrivateBrowsing(bool incognito);
bool GetPrivateBrowsing() const;
+#endif
const char* GetUserAgent() const;
const char* GetUserAgentAppName() const;
const char* CacheSelectedText();
bool GetLinkMagnifierEnabled() const;
void SetLinkMagnifierEnabled(bool enabled);
+ bool GetHorizontalPanningHold() const;
+ void SetHorizontalPanningHold(bool hold);
+ bool GetVerticalPanningHold() const;
+ void SetVerticalPanningHold(bool hold);
+
void SetQuotaPermissionRequestCallback(
Ewk_Quota_Permission_Request_Callback callback,
void* user_data);
bool ShouldIgnoreNavigation(content::NavigationHandle* navigation_handle);
+#if BUILDFLAG(IS_TIZEN_TV)
+ void DrawLabel(Evas_Object* image, Eina_Rectangle rect);
+ void ClearLabels();
+#endif // IS_TIZEN_TV
+
+ void SetDidChangeThemeColorCallback(
+ Ewk_View_Did_Change_Theme_Color_Callback callback,
+ void* user_data);
+ void DidChangeThemeColor(const SkColor& color);
+
private:
void InitializeContent();
void InitializeWindowTreeHost();
scoped_refptr<WebViewEvasEventHandler> evas_event_handler_;
scoped_refptr<Ewk_Context> context_;
- scoped_refptr<Ewk_Context> old_context_;
std::unique_ptr<content::WebContents> web_contents_;
std::unique_ptr<content::WebContentsDelegateEfl> web_contents_delegate_;
std::string pending_url_request_;
WebViewCallback<Ewk_View_Scale_Changed_Callback, double> scale_changed_cb_;
std::unique_ptr<content::InputPicker> input_picker_;
+
+ DidChangeThemeColorCallback did_change_theme_color_callback_;
+
base::IDMap<WebApplicationIconUrlGetCallback*>
web_app_icon_url_get_callback_map_;
base::IDMap<WebApplicationIconUrlsGetCallback*>
using content::BrowserContextEfl;
-static Ewk_Context* default_context_ = NULL;
+static Ewk_Context* default_context_ = nullptr;
+static Ewk_Context* incognito_context_ = nullptr;
// static
Ewk_Context* Ewk_Context::DefaultContext() {
- if (!default_context_) {
- // default context is not incognito
+ if (!default_context_)
default_context_ = Ewk_Context::Create(false);
- }
return default_context_;
}
// static
+Ewk_Context* Ewk_Context::IncognitoContext() {
+ if (!incognito_context_)
+ incognito_context_ = Ewk_Context::Create(true);
+
+ return incognito_context_;
+}
+
+// static
void Ewk_Context::DefaultContextRelease() {
if (default_context_) {
// this method should be called from ewk_shutdown and ewk_shutdown should
// static
Ewk_Context* Ewk_Context::Create(bool incognito) {
Ewk_Context* context = new Ewk_Context(incognito);
- context->AddRef();
+ if (!incognito)
+ context->AddRef();
return context;
}
Ewk_Context::~Ewk_Context() {
if (this == default_context_)
- default_context_= NULL;
+ default_context_ = nullptr;
+ else if (this == incognito_context_)
+ incognito_context_ = nullptr;
delete impl;
}
impl->GetApplicationCacheUsage(url, callback, user_data);
}
+void Ewk_Context::GetLocalStorageUsageForOrigin(
+ const GURL& origin,
+ Ewk_Web_Storage_Usage_Get_Callback callback,
+ void* user_data) {
+ impl->GetLocalStorageUsageForOrigin(origin, callback, user_data);
+}
+
void Ewk_Context::DeleteAllApplicationCache() {
impl->DeleteAllApplicationCache();
}
impl->WebDBDelete(host);
}
+void Ewk_Context::GetWebDBUsageForOrigin(
+ const GURL& origin,
+ Ewk_Web_Database_Usage_Get_Callback callback,
+ void* userData) {
+ impl->GetWebDBUsageForOrigin(origin, callback, userData);
+}
+
void Ewk_Context::IndexedDBDelete() {
impl->IndexedDBDelete();
}
struct Ewk_Context : public base::RefCounted<Ewk_Context> {
public:
static Ewk_Context* DefaultContext();
+ static Ewk_Context* IncognitoContext();
static void DefaultContextRelease();
static Ewk_Context* Create(bool incognito = false);
static Ewk_Context* Create(const std::string& injectedBundlePath);
// Application Cache
void GetAllOriginsWithApplicationCache(
Ewk_Web_Application_Cache_Origins_Get_Callback callback, void* user_data);
- void GetApplicationCacheUsage(const GURL& url,
+ void GetApplicationCacheUsage(
+ const GURL& url,
Ewk_Web_Application_Cache_Usage_For_Origin_Get_Callback callback,
void* user_data);
+ void GetLocalStorageUsageForOrigin(
+ const GURL& origin,
+ Ewk_Web_Storage_Usage_Get_Callback callback,
+ void* user_data);
void DeleteAllApplicationCache();
void DeleteApplicationCacheForSite(const GURL& url);
void GetAllOriginsWithWebDB(Ewk_Web_Database_Origins_Get_Callback callback,
void* user_data);
void WebDBDelete(const GURL& host);
+ void GetWebDBUsageForOrigin(const GURL& origin,
+ Ewk_Web_Database_Usage_Get_Callback callback,
+ void* userData);
// Indexed DB
void IndexedDBDelete();
#define COMPILE_ASSERT_MATCHING_ENUM(ewkName, webcoreName) \
COMPILE_ASSERT(int(ewkName) == int(webcoreName), mismatchingEnums)
+// Temporarily added in order to track not-yet-implemented ewk api calls.
#define LOG_EWK_API_MOCKUP(msg) \
LOG(INFO) << "[EWK_API_MOCKUP] " \
<< " " << __FUNCTION__ << std::string(msg);
#include "net/http/http_stream_factory.h"
-void Ewk_Settings::setSpdyEnabled(bool flag)
-{
-#if !defined(EWK_BRINGUP) // FIXME: m67 bringup
- // FIXME: EWK_BRINGUP definition should be removed.
- net::HttpStreamFactory::set_spdy_enabled(flag);
-#endif // !defined(EWK_BRINGUP)
-}
-
void Ewk_Settings::setCurrentLegacyFontSizeMode(Ewk_Legacy_Font_Size_Mode mode) {
m_currentLegacyFontSizeMode = mode;
-#if !defined(EWK_BRINGUP) // FIXME: m67 bringup
- m_preferences.current_legacy_font_size_mode = static_cast<content::LegacyFontSizeMode>(mode);
-#endif
}
void Ewk_Settings::setDefaultTextEncoding(const char* encoding) {
Eina_Bool ewk_context_web_storage_usage_for_origin_get(Ewk_Context* context, Ewk_Security_Origin* origin, Ewk_Web_Storage_Usage_Get_Callback callback, void* userData)
{
- LOG_EWK_API_MOCKUP();
- return false;
+ EINA_SAFETY_ON_NULL_RETURN_VAL(callback, EINA_FALSE);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(origin, EINA_FALSE);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(context, EINA_FALSE);
+ context->GetLocalStorageUsageForOrigin(origin->GetURL(), callback, userData);
+ return EINA_TRUE;
}
Eina_Bool ewk_context_soup_data_directory_set(Ewk_Context* /*context*/, const char* /*path*/)
Eina_Bool ewk_context_web_database_usage_for_origin_get(Ewk_Context* context, Ewk_Web_Database_Usage_Get_Callback callback, void* user_data, Ewk_Security_Origin* origin)
{
- LOG_EWK_API_MOCKUP();
- return false;
+ EINA_SAFETY_ON_NULL_RETURN_VAL(context, EINA_FALSE);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(callback, EINA_FALSE);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(origin, EINA_FALSE);
+ context->GetWebDBUsageForOrigin(origin->GetURL(), callback, user_data);
+ return EINA_TRUE;
}
void ewk_context_form_password_data_update(Ewk_Context* context, const char* url, Eina_Bool useFingerprint)
Eina_Bool ewk_settings_private_browsing_enabled_set(Ewk_Settings* settings, Eina_Bool enable)
{
- EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
- EWebView* impl = EWebView::FromEvasObject(settings->getEvasObject());
- return impl->SetPrivateBrowsing(enable);
+#if BUILDFLAG(IS_TIZEN_TV)
+ LOG_EWK_API_DEPRECATED("Use ewk_view_add_in_incognito_mode() instead.");
+#elif BUILDFLAG(IS_TIZEN)
+ if (IsMobileProfile()) {
+ EINA_SAFETY_ON_NULL_RETURN_VAL(settings, EINA_FALSE);
+ EWebView* impl = EWebView::FromEvasObject(settings->getEvasObject());
+ return impl->SetPrivateBrowsing(enable);
+ }
+#endif
+ return EINA_FALSE;
}
Eina_Bool ewk_settings_private_browsing_enabled_get(const Ewk_Settings* settings)
{
- EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
- EWK_VIEW_IMPL_GET_OR_RETURN(const_cast<Ewk_Settings *>(settings)->getEvasObject(), webview, EINA_FALSE);
- return webview->GetPrivateBrowsing();
+#if BUILDFLAG(IS_TIZEN_TV)
+ LOG_EWK_API_DEPRECATED("Use ewk_view_add_in_incognito_mode() instead.");
+#elif BUILDFLAG(IS_TIZEN)
+ if (IsMobileProfile()) {
+ EINA_SAFETY_ON_NULL_RETURN_VAL(settings, EINA_FALSE);
+ EWK_VIEW_IMPL_GET_OR_RETURN(
+ const_cast<Ewk_Settings*>(settings)->getEvasObject(), webview,
+ EINA_FALSE);
+ return webview->GetPrivateBrowsing();
+ }
+#endif
+ return EINA_FALSE;
}
Eina_Bool ewk_settings_editable_link_behavior_set(Ewk_Settings* settings, Ewk_Editable_Link_Behavior behavior)
Evas_Object* ewk_view_add_in_incognito_mode(Evas* e)
{
- Ewk_Context* context = Ewk_Context::Create(true);
- EINA_SAFETY_ON_NULL_RETURN_VAL(context, NULL);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(e, nullptr);
+ Ewk_Context* context = Ewk_Context::IncognitoContext();
+ EINA_SAFETY_ON_NULL_RETURN_VAL(context, nullptr);
return ewk_view_add_with_context(e, context);
}
return NULL;
}
+Eina_Bool ewk_view_horizontal_panning_hold_get(Evas_Object* ewkView) {
+ EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl, EINA_FALSE);
+ return impl->GetHorizontalPanningHold();
+}
+
+void ewk_view_horizontal_panning_hold_set(Evas_Object* ewkView,
+ Eina_Bool hold) {
+ EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl);
+ impl->SetHorizontalPanningHold(hold);
+}
+
Eina_Bool ewk_view_vertical_panning_hold_get(Evas_Object* ewkView)
{
- LOG_EWK_API_MOCKUP();
- return false;
+ EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl, EINA_FALSE);
+ return impl->GetVerticalPanningHold();
}
-void ewk_view_vertical_panning_hold_set(Evas_Object* view, Eina_Bool hold)
-{
- LOG_EWK_API_MOCKUP();
+void ewk_view_vertical_panning_hold_set(Evas_Object* view, Eina_Bool hold) {
EWK_VIEW_IMPL_GET_OR_RETURN(view, impl);
- // FIX ME: Currently the pan support is not present.
- // In WK2 panning was implemented with evas directly, here its with chorme gesture reconignation
- // So paning is not present yet
+ impl->SetVerticalPanningHold(hold);
}
void ewk_view_orientation_lock_callback_set(Evas_Object* ewkView, Ewk_Orientation_Lock_Cb func, void* data)
return NULL;
}
-Eina_Bool ewk_view_horizontal_panning_hold_get(Evas_Object* o)
-{
- LOG_EWK_API_MOCKUP();
- return false;
-}
-
-void ewk_view_horizontal_panning_hold_set(Evas_Object* o, Eina_Bool hold)
-{
- LOG_EWK_API_MOCKUP();
-}
-
Eina_Bool ewk_view_draws_transparent_background_get(Evas_Object* o)
{
LOG_EWK_API_MOCKUP();
return false;
}
-Eina_Bool ewk_view_split_scroll_overflow_enabled_get(const Evas_Object* o)
-{
- LOG_EWK_API_MOCKUP();
- return false;
+Eina_Bool ewk_view_did_change_theme_color_callback_set(
+ Evas_Object* o,
+ Ewk_View_Did_Change_Theme_Color_Callback callback,
+ void* user_data) {
+ EWK_VIEW_IMPL_GET_OR_RETURN(o, impl, EINA_FALSE);
+ impl->SetDidChangeThemeColorCallback(callback, user_data);
+ return EINA_TRUE;
}
-Eina_Bool ewk_view_did_change_theme_color_callback_set(Evas_Object* o, Ewk_View_Did_Change_Theme_Color_Callback callback, void* user_data)
-{
+Eina_Bool ewk_view_split_scroll_overflow_enabled_get(const Evas_Object* o) {
LOG_EWK_API_MOCKUP();
return false;
}
return false;
}
-void ewk_view_voicemanager_label_draw(Evas_Object* view, Evas_Object* image, Eina_Rectangle rect){
- LOG_EWK_API_MOCKUP();
-}
-
-void ewk_view_voicemanager_labels_clear(Evas_Object* view)
-{
- LOG_EWK_API_MOCKUP();
-}
-
void ewk_view_mirrored_blur_set(Evas_Object* o, Eina_Bool state)
{
LOG_EWK_API_MOCKUP();
return EINA_FALSE;
}
+void ewk_view_voicemanager_label_draw(Evas_Object* view,
+ Evas_Object* image,
+ Eina_Rectangle rect) {
+#if BUILDFLAG(IS_TIZEN_TV)
+ EINA_SAFETY_ON_NULL_RETURN(image);
+ EWK_VIEW_IMPL_GET_OR_RETURN(view, impl);
+ impl->DrawLabel(image, rect);
+#else
+ LOG_EWK_API_MOCKUP("Only for Tizen TV.");
+#endif
+}
+
+void ewk_view_voicemanager_labels_clear(Evas_Object* view) {
+#if BUILDFLAG(IS_TIZEN_TV)
+ EWK_VIEW_IMPL_GET_OR_RETURN(view, impl);
+ impl->ClearLabels();
+#else
+ LOG_EWK_API_MOCKUP("Only for Tizen TV.");
+#endif
+}
+
void ewk_view_floating_window_state_changed(const Evas_Object *o, Eina_Bool status)
{
LOG_EWK_API_MOCKUP();
}
}
+void WebContentsObserverEfl::DidChangeThemeColor() {
+ web_view_->DidChangeThemeColor(
+ web_contents_.GetThemeColor().value_or(SK_ColorTRANSPARENT));
+}
+
bool WebContentsObserverEfl::OnMessageReceived(
const IPC::Message& message,
RenderFrameHost* render_frame_host) {
const std::vector<blink::mojom::FaviconURLPtr>& candidates) override;
bool OnMessageReceived(const IPC::Message& message,
RenderFrameHost* render_frame_host) override;
+ void DidChangeThemeColor() override;
// IPC message handlers:
void OnDidCreateDocumentElement();
include_dirs = [ "../efl_integration/public" ]
sources = [
"execute_utc_blink.cpp",
+ "utc_blink_api_result_locked.h",
"utc_blink_cb_contextmenu_allowed.cpp",
"utc_blink_cb_contextmenu_willshow.cpp",
"utc_blink_cb_editorclient_candidate_closed.cpp",
"utc_blink_ewk_context_icon_database_path_set_func.cpp",
"utc_blink_ewk_context_inspector_server_start_func.cpp",
"utc_blink_ewk_context_inspector_server_stop_func.cpp",
+ "utc_blink_ewk_context_intercept_request_callback_set_func.cpp",
"utc_blink_ewk_context_local_file_system_all_delete_func.cpp",
"utc_blink_ewk_context_menu.h",
"utc_blink_ewk_context_menu_item_append_as_action_func.cpp",
"utc_blink_ewk_context_web_database_delete_all_func.cpp",
"utc_blink_ewk_context_web_database_delete_func.cpp",
"utc_blink_ewk_context_web_database_origins_get_func.cpp",
+ "utc_blink_ewk_context_web_database_usage_for_origin_get_func.cpp",
"utc_blink_ewk_context_web_indexed_database_delete_all_func.cpp",
"utc_blink_ewk_context_web_storage_delete_all_func.cpp",
"utc_blink_ewk_context_web_storage_origin_delete_func.cpp",
"utc_blink_ewk_context_web_storage_origins_get_func.cpp",
+ "utc_blink_ewk_context_web_storage_usage_for_origin_get_func.cpp",
"utc_blink_ewk_cookie_manager_accept_policy_async_get_func.cpp",
"utc_blink_ewk_cookie_manager_accept_policy_set_func.cpp",
"utc_blink_ewk_cookie_manager_cookies_clear_func.cpp",
"utc_blink_ewk_hit_test_request_base.cpp",
"utc_blink_ewk_hit_test_result_context_get_func.cpp",
"utc_blink_ewk_hit_test_tag_name_get_func.cpp",
+ "utc_blink_ewk_intercept_request_get_base.cpp",
+ "utc_blink_ewk_intercept_request_get_base.h",
+ "utc_blink_ewk_intercept_request_headers_get_func.cpp",
+ "utc_blink_ewk_intercept_request_http_method_get_func.cpp",
+ "utc_blink_ewk_intercept_request_ignore_func.cpp",
+ "utc_blink_ewk_intercept_request_response_base.cpp",
+ "utc_blink_ewk_intercept_request_response_base.h",
+ "utc_blink_ewk_intercept_request_response_body_set_func.cpp",
+ "utc_blink_ewk_intercept_request_response_header_add_func.cpp",
+ "utc_blink_ewk_intercept_request_response_header_map_add_func.cpp",
+ "utc_blink_ewk_intercept_request_response_set_func.cpp",
+ "utc_blink_ewk_intercept_request_response_status_set_func.cpp",
+ "utc_blink_ewk_intercept_request_response_write_chunk_func.cpp",
+ "utc_blink_ewk_intercept_request_scheme_get_func.cpp",
+ "utc_blink_ewk_intercept_request_url_get_func.cpp",
"utc_blink_ewk_notification_body_get_func.cpp",
"utc_blink_ewk_notification_callbacks_reset_func.cpp",
"utc_blink_ewk_notification_callbacks_set_func.cpp",
"utc_blink_ewk_view_context_get_func.cpp",
"utc_blink_ewk_view_custom_header_add_func.cpp",
"utc_blink_ewk_view_custom_header_remove_func.cpp",
+ "utc_blink_ewk_view_did_change_theme_color_callback_set_func.cpp",
"utc_blink_ewk_view_draws_transparent_background_set_func.cpp",
"utc_blink_ewk_view_encoding_custom_set_func.cpp",
"utc_blink_ewk_view_forward_func.cpp",
"utc_blink_ewk_view_history_get_func.cpp",
"utc_blink_ewk_view_hit_test_new_func.cpp",
"utc_blink_ewk_view_hit_test_request_func.cpp",
+ "utc_blink_ewk_view_horizontal_panning_hold_get_func.cpp",
+ "utc_blink_ewk_view_horizontal_panning_hold_set_func.cpp",
"utc_blink_ewk_view_html_contents_set_func.cpp",
"utc_blink_ewk_view_html_string_load_func.cpp",
"utc_blink_ewk_view_inspector_server_stop_func.cpp",
"utc_blink_ewk_view_use_settings_font_func.cpp",
"utc_blink_ewk_view_user_agent_get_func.cpp",
"utc_blink_ewk_view_user_agent_set_func.cpp",
+ "utc_blink_ewk_view_vertical_panning_hold_get_func.cpp",
+ "utc_blink_ewk_view_vertical_panning_hold_set_func.cpp",
"utc_blink_ewk_view_visibility_set_func.cpp",
"utc_blink_ewk_view_web_application_capable_get_func.cpp",
"utc_blink_ewk_view_web_application_icon_url_get_func.cpp",
--- /dev/null
+<html>
+<head>
+<meta name="theme-color" content="#326496">
+</head>
+<body>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<meta name="theme-color" content="#6496C8">
+</head>
+<body>
+</body>
+</html>
--- /dev/null
+// Copyright 2016 Samsung Electronics. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UTC_BLINK_API_RESULT_LOCKED_H_
+#define UTC_BLINK_API_RESULT_LOCKED_H_
+
+#include <mutex>
+
+template <typename T>
+class ApiResultLocked {
+ public:
+ ApiResultLocked() : is_set_(false) {}
+
+ void operator=(const T& t) { Set(t); }
+ void Set(const T& t) {
+ lock_.lock();
+ result_ = t;
+ is_set_ = true;
+ lock_.unlock();
+ }
+ T Get() {
+ lock_.lock();
+ auto t = result_;
+ lock_.unlock();
+ return t;
+ }
+ bool IsSet() {
+ lock_.lock();
+ auto is_set = is_set_;
+ lock_.unlock();
+ return is_set;
+ }
+
+ private:
+ bool is_set_;
+ T result_;
+ std::mutex lock_;
+};
+
+#endif // UTC_BLINK_API_RESULT_LOCKED_H_
// found in the LICENSE file.
#include "utc_blink_ewk_base.h"
-#define URL "http://reference.vodafone.com/widgets/"
+#define URL "https://review.tizen.org/gerrit/#/"
static Eina_Bool is_failed;
static Eina_Bool is_Authenticated;
#include "utc_blink_ewk_base.h"
-#define URL "http://reference.vodafone.com/widgets/"
+#define URL "https://review.tizen.org/gerrit/#/"
class utc_blink_ewk_auth_challenge_credential_use : public utc_blink_ewk_base
{
#include "utc_blink_ewk_base.h"
+static const char* const kUrl = "https://review.tizen.org/gerrit/#/";
+
class utc_blink_ewk_auth_challenge_realm_get : public utc_blink_ewk_base
{
protected:
if (auth_challenge)
{
std::string realm = ewk_auth_challenge_realm_get(auth_challenge);
- if (realm == "Widget TestCases EARLY ACCESS") {
- owner->EventLoopStop(utc_blink_ewk_base::Success);
- return;
+ if (realm == "Tizen.org ACCOUNT") {
+ owner->EventLoopStop(utc_blink_ewk_base::Success);
+ return;
}
}
owner->EventLoopStop(utc_blink_ewk_base::Failure);
*/
TEST_F(utc_blink_ewk_auth_challenge_realm_get, POS_TEST)
{
- ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), "http://reference.vodafone.com/widgets/"));
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), kUrl));
EXPECT_EQ(Success, EventLoopStart());
}
*/
TEST_F(utc_blink_ewk_auth_challenge_realm_get, NEG_TEST)
{
- ASSERT_FALSE(ewk_view_url_set(NULL, "http://reference.vodafone.com/widgets/"));
+ ASSERT_FALSE(ewk_view_url_set(NULL, kUrl));
}
#include "utc_blink_ewk_base.h"
+static const char* const kUrl = "https://review.tizen.org/gerrit/#/";
+
class utc_blink_ewk_auth_challenge_suspend : public utc_blink_ewk_base
{
protected:
*/
TEST_F(utc_blink_ewk_auth_challenge_suspend, POS_TEST)
{
- ASSERT_EQ(EINA_TRUE, ewk_view_url_set(GetEwkWebView(), "http://reference.vodafone.com/widgets/"));
+ ASSERT_EQ(EINA_TRUE, ewk_view_url_set(GetEwkWebView(), kUrl));
EXPECT_EQ(Success, EventLoopStart());
}
*/
TEST_F(utc_blink_ewk_auth_challenge_suspend, NEG_TEST)
{
- ASSERT_EQ(EINA_FALSE, ewk_view_url_set(NULL,"http://reference.vodafone.com/widgets/"));
+ ASSERT_EQ(EINA_FALSE, ewk_view_url_set(NULL, kUrl));
}
--- /dev/null
+// Copyright 2016 Samsung Electronics. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "utc_blink_ewk_base.h"
+
+#include <atomic>
+
+class utc_blink_ewk_context_intercept_request_callback_set
+ : public utc_blink_ewk_base {
+ protected:
+ utc_blink_ewk_context_intercept_request_callback_set()
+ : callback_called_(false) {}
+
+ static const char* kInterceptURL;
+
+ void LoadFinished(Evas_Object* webview) override {
+ // Should not load without decision about interception.
+ EventLoopStop(Failure);
+ }
+
+ static void intercept_request_callback(
+ Ewk_Context* /*ctx*/,
+ Ewk_Intercept_Request* intercept_request,
+ void* user_data) {
+ auto* owner =
+ static_cast<utc_blink_ewk_context_intercept_request_callback_set*>(
+ user_data);
+ owner->callback_called_.store(true);
+ }
+
+ std::atomic<bool> callback_called_;
+};
+
+const char*
+ utc_blink_ewk_context_intercept_request_callback_set::kInterceptURL =
+ "http://www.google.com/";
+
+/**
+ * @brief Tests if intercept request callback is called.
+ */
+TEST_F(utc_blink_ewk_context_intercept_request_callback_set,
+ POS_TEST_CALLBACK_SET) {
+ ewk_context_intercept_request_callback_set(
+ ewk_view_context_get(GetEwkWebView()), intercept_request_callback, this);
+
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), kInterceptURL));
+ ASSERT_EQ(Timeout, EventLoopStart(3.0));
+ ASSERT_TRUE(callback_called_.load());
+}
+
+/**
+ * @brief Tests if function resets callback in case of NULL of a callback.
+ */
+TEST_F(utc_blink_ewk_context_intercept_request_callback_set,
+ POS_TEST_CALLBACK_RESET) {
+ ewk_context_intercept_request_callback_set(
+ ewk_view_context_get(GetEwkWebView()), intercept_request_callback, this);
+ ewk_context_intercept_request_callback_set(
+ ewk_view_context_get(GetEwkWebView()), nullptr, nullptr);
+
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), kInterceptURL));
+
+ // Expected value Failure, because LoadFinished sets this status
+ // if url loads normally.
+ ASSERT_EQ(Failure, EventLoopStart());
+ ASSERT_FALSE(callback_called_.load());
+}
+
+/**
+ * @brief Tests if function works properly in case of NULL of a context.
+ */
+TEST_F(utc_blink_ewk_context_intercept_request_callback_set,
+ NEG_TEST_NULL_CONTEXT) {
+ ewk_context_intercept_request_callback_set(
+ nullptr, intercept_request_callback, nullptr);
+}
--- /dev/null
+// Copyright 2016 Samsung Electronics. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "utc_blink_ewk_base.h"
+
+#define SAMPLE_ORIGIN "dwieleverece.github.io"
+const char* const WEB_DATABASE_SAMPLE_URL =
+ "https://" SAMPLE_ORIGIN "/tests/web_database_test/";
+
+class utc_blink_ewk_context_web_database_usage_for_origin_get
+ : public utc_blink_ewk_base {
+ protected:
+ utc_blink_ewk_context_web_database_usage_for_origin_get()
+ : context_(nullptr),
+ usage_(0),
+ neg_test_(false),
+ neg_result_1_(false),
+ neg_result_2_(false),
+ neg_result_3_(false),
+ usage_get_result_(false) {}
+
+ void PostSetUp() override {
+ ASSERT_TRUE(context_ = ewk_view_context_get(GetEwkWebView()));
+ // we want empty web database at test start
+ ASSERT_TRUE(ewk_context_web_database_delete_all(context_));
+ }
+
+ void LoadFinished(Evas_Object*) override { EventLoopStop(Success); }
+
+ void NegTest(Eina_List* origins) {
+ utc_message("NegTest: %p", origins);
+
+ Ewk_Security_Origin* origin = nullptr;
+ Ewk_Security_Origin* chosen_origin = nullptr;
+ Eina_List* it;
+ void* vorigin = nullptr;
+ EINA_LIST_FOREACH(origins, it, vorigin) {
+ origin = static_cast<Ewk_Security_Origin*>(vorigin);
+
+ const char* host = ewk_security_origin_host_get(origin);
+ if (host && !strcmp(host, SAMPLE_ORIGIN)) {
+ chosen_origin = origin;
+ break;
+ }
+ }
+ if (!chosen_origin)
+ EventLoopStop(Failure);
+ neg_result_1_ = ewk_context_web_database_usage_for_origin_get(
+ nullptr, UsageGetCb, this, origin);
+ neg_result_2_ = ewk_context_web_database_usage_for_origin_get(
+ context_, nullptr, this, origin);
+ neg_result_3_ = ewk_context_web_database_usage_for_origin_get(
+ context_, UsageGetCb, this, nullptr);
+ EventLoopStop(Success);
+ }
+
+ void FindSecurityOrigin(Eina_List* origins) {
+ utc_message("FindSecurityOrigin: %p", origins);
+
+ Ewk_Security_Origin* origin = nullptr;
+ Eina_List* it;
+ void* vorigin = nullptr;
+ EINA_LIST_FOREACH(origins, it, vorigin) {
+ origin = static_cast<Ewk_Security_Origin*>(vorigin);
+
+ const char* host = ewk_security_origin_host_get(origin);
+ if (host && !strcmp(host, SAMPLE_ORIGIN)) {
+ usage_get_result_ = ewk_context_web_database_usage_for_origin_get(
+ context_, UsageGetCb, this, origin);
+ EventLoopStop(Success);
+ }
+ }
+ EventLoopStop(Failure);
+ }
+
+ static void OriginsGetCb(Eina_List* origins, void* user_data) {
+ utc_message("OriginsGetCb: %p, %p", origins, user_data);
+ if (!user_data) {
+ ewk_context_origins_free(origins);
+ return;
+ }
+
+ auto self =
+ static_cast<utc_blink_ewk_context_web_database_usage_for_origin_get*>(
+ user_data);
+
+ if (!origins) {
+ self->EventLoopStop(Failure);
+ return;
+ }
+
+ if (self->neg_test_)
+ self->NegTest(origins);
+ else
+ self->FindSecurityOrigin(origins);
+ }
+
+ static void UsageGetCb(uint64_t usage, void* user_data) {
+ utc_message("UsageGetCb: %lu, %p", usage, user_data);
+ if (!user_data)
+ return;
+
+ auto self =
+ static_cast<utc_blink_ewk_context_web_database_usage_for_origin_get*>(
+ user_data);
+
+ self->usage_ = usage;
+ self->EventLoopStop(Success);
+ }
+
+ protected:
+ Ewk_Context* context_;
+ uint64_t usage_;
+ bool neg_test_;
+ bool neg_result_1_;
+ bool neg_result_2_;
+ bool neg_result_3_;
+ bool usage_get_result_;
+};
+
+/**
+ * @brief Tests if usage can be obtained when websql is used
+ */
+TEST_F(utc_blink_ewk_context_web_database_usage_for_origin_get, POS_TEST) {
+ utc_message("Loading web page: %s", WEB_DATABASE_SAMPLE_URL);
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), WEB_DATABASE_SAMPLE_URL));
+ ASSERT_EQ(Success, EventLoopStart());
+
+ // testcase is hosted on github pages (github.io) for free, so it can be slow
+ EventLoopWait(10.0);
+ ASSERT_TRUE(
+ ewk_context_web_database_origins_get(context_, OriginsGetCb, this));
+ ASSERT_EQ(Success, EventLoopStart());
+
+ ASSERT_TRUE(usage_get_result_);
+ ASSERT_GT(usage_, 0);
+}
+
+/**
+ * @brief Tests if returns false when parameters are null.
+ */
+TEST_F(utc_blink_ewk_context_web_database_usage_for_origin_get, NEG_TEST) {
+ utc_message("Loading web page: %s", WEB_DATABASE_SAMPLE_URL);
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), WEB_DATABASE_SAMPLE_URL));
+ ASSERT_EQ(Success, EventLoopStart());
+
+ // testcase is hosted on github pages (github.io) for free, so it can be slow
+ EventLoopWait(10.0);
+ neg_test_ = true;
+ ASSERT_TRUE(
+ ewk_context_web_database_origins_get(context_, OriginsGetCb, this));
+ ASSERT_EQ(Success, EventLoopStart());
+ ASSERT_FALSE(neg_result_1_);
+ ASSERT_FALSE(neg_result_2_);
+ ASSERT_FALSE(neg_result_3_);
+}
--- /dev/null
+// Copyright 2015 Samsung Electronics. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/* Define those macros _before_ you include the utc_blink_ewk.h header file. */
+
+#include "utc_blink_ewk_base.h"
+
+#define SAMPLE_ORIGIN "jmajnert.github.io"
+const char* const WEB_STORAGE_SAMPLE_URL =
+ "http://" SAMPLE_ORIGIN
+ "/tests/"
+ "localStorage_test/web_storage_create_simple.html";
+
+class utc_blink_ewk_context_web_storage_usage_for_origin_get
+ : public utc_blink_ewk_base {
+ protected:
+ utc_blink_ewk_context_web_storage_usage_for_origin_get()
+ : utc_blink_ewk_base(), context_(nullptr), usage_(0), neg_test_(false) {}
+
+ void PostSetUp() override {
+ ASSERT_TRUE(context_ = ewk_view_context_get(GetEwkWebView()));
+ // we want empty web storage at test start
+ ASSERT_TRUE(ewk_context_web_storage_delete_all(context_));
+ }
+
+ void LoadFinished(Evas_Object*) override { EventLoopStop(Success); }
+
+ void NegTest(Eina_List* origins) {
+ utc_message("NegTest: %p", origins);
+
+ Ewk_Security_Origin* origin = nullptr;
+ Ewk_Security_Origin* chosen_origin = nullptr;
+ Eina_List* it;
+ void* vorigin = nullptr;
+ EINA_LIST_FOREACH(origins, it, vorigin) {
+ origin = static_cast<Ewk_Security_Origin*>(vorigin);
+
+ const char* host = ewk_security_origin_host_get(origin);
+ if (host && !strcmp(host, SAMPLE_ORIGIN)) {
+ chosen_origin = origin;
+ break;
+ }
+ }
+ if (!chosen_origin)
+ EventLoopStop(Failure);
+ ASSERT_FALSE(ewk_context_web_storage_usage_for_origin_get(
+ nullptr, origin, usage_get_cb, this));
+ ASSERT_FALSE(ewk_context_web_storage_usage_for_origin_get(
+ context_, nullptr, usage_get_cb, this));
+ ASSERT_FALSE(ewk_context_web_storage_usage_for_origin_get(context_, origin,
+ nullptr, this));
+ EventLoopStop(Success);
+ }
+
+ void FindSecurityOrigin(Eina_List* origins) {
+ utc_message("FindSecurityOrigin: %p", origins);
+
+ Ewk_Security_Origin* origin = nullptr;
+ Eina_List* it;
+ void* vorigin = nullptr;
+ EINA_LIST_FOREACH(origins, it, vorigin) {
+ origin = static_cast<Ewk_Security_Origin*>(vorigin);
+
+ const char* host = ewk_security_origin_host_get(origin);
+ if (host && !strcmp(host, SAMPLE_ORIGIN)) {
+ ASSERT_TRUE(ewk_context_web_storage_usage_for_origin_get(
+ context_, origin, usage_get_cb, this));
+ return;
+ }
+ }
+ EventLoopStop(Failure);
+ }
+
+ static void origins_get_cb(Eina_List* origins, void* user_data) {
+ utc_message("origins_get_cb: %p, %p", origins, user_data);
+ if (!user_data) {
+ ewk_context_origins_free(origins);
+ FAIL();
+ }
+
+ auto* self =
+ static_cast<utc_blink_ewk_context_web_storage_usage_for_origin_get*>(
+ user_data);
+
+ if (!origins) {
+ self->EventLoopStop(Failure);
+ return;
+ }
+
+ if (self->neg_test_)
+ self->NegTest(origins);
+ else
+ self->FindSecurityOrigin(origins);
+ }
+
+ static void usage_get_cb(uint64_t usage, void* user_data) {
+ utc_message("usage_get_cb: %lu, %p", usage, user_data);
+ if (!user_data) {
+ FAIL();
+ return;
+ }
+
+ auto* self =
+ static_cast<utc_blink_ewk_context_web_storage_usage_for_origin_get*>(
+ user_data);
+
+ self->usage_ = usage;
+ self->EventLoopStop(Success);
+ }
+
+ protected:
+ Ewk_Context* context_;
+ uint64_t usage_;
+ bool neg_test_;
+};
+
+/**
+ * @brief Tests if usage can be obtained when localstorage is used
+ */
+TEST_F(utc_blink_ewk_context_web_storage_usage_for_origin_get, POS_TEST) {
+ utc_message("Loading web page: %s", WEB_STORAGE_SAMPLE_URL);
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), WEB_STORAGE_SAMPLE_URL));
+ ASSERT_EQ(Success, EventLoopStart());
+
+ EventLoopWait(10.0);
+ ASSERT_TRUE(
+ ewk_context_web_storage_origins_get(context_, origins_get_cb, this));
+ ASSERT_EQ(Success, EventLoopStart());
+
+ ASSERT_TRUE(usage_);
+}
+
+/**
+ * @brief Tests if returns false when parameters are null.
+ */
+TEST_F(utc_blink_ewk_context_web_storage_usage_for_origin_get, NEG_TEST) {
+ utc_message("Loading web page: %s", WEB_STORAGE_SAMPLE_URL);
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), WEB_STORAGE_SAMPLE_URL));
+ ASSERT_EQ(Success, EventLoopStart());
+
+ EventLoopWait(10.0);
+ neg_test_ = true;
+ ASSERT_TRUE(
+ ewk_context_web_storage_origins_get(context_, origins_get_cb, this));
+ ASSERT_EQ(Success, EventLoopStart());
+}
--- /dev/null
++ // Copyright 2016 Samsung Electronics. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "utc_blink_ewk_intercept_request_get_base.h"
+
+ const std::string utc_blink_ewk_intercept_request_get_base::kInterceptURL =
+ "http://www.google.com/";
+
+utc_blink_ewk_intercept_request_get_base::
+ utc_blink_ewk_intercept_request_get_base()
+ : api_executed_(false) {}
+
+utc_blink_ewk_intercept_request_get_base::
+ ~utc_blink_ewk_intercept_request_get_base() {}
+
+void utc_blink_ewk_intercept_request_get_base::LoadFinished(
+ Evas_Object* webview) {
+ // Should not load without decision about interception.
+ EventLoopStop(Failure);
+}
+
+void utc_blink_ewk_intercept_request_get_base::callback_positive(
+ Ewk_Context* /*ctx*/,
+ Ewk_Intercept_Request* intercept_request,
+ void* user_data) {
+ auto* owner =
+ static_cast<utc_blink_ewk_intercept_request_get_base*>(user_data);
+ owner->test_func(intercept_request);
+ owner->api_executed_.store(true);
+}
+
+void utc_blink_ewk_intercept_request_get_base::callback_negative(
+ Ewk_Context* /*ctx*/,
+ Ewk_Intercept_Request* /*intercept_request*/,
+ void* user_data) {
+ auto* owner =
+ static_cast<utc_blink_ewk_intercept_request_get_base*>(user_data);
+ owner->test_func(nullptr);
+ owner->api_executed_.store(true);
+}
+
+void utc_blink_ewk_intercept_request_get_base::pos_test() {
+ ewk_context_intercept_request_callback_set(
+ ewk_view_context_get(GetEwkWebView()), callback_positive, this);
+
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), kInterceptURL.c_str()));
+ ASSERT_EQ(Timeout, EventLoopStart(3.0));
+ ASSERT_TRUE(api_executed_.load());
+}
+
+void utc_blink_ewk_intercept_request_get_base::neg_test() {
+ ewk_context_intercept_request_callback_set(
+ ewk_view_context_get(GetEwkWebView()), callback_negative, this);
+
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), kInterceptURL.c_str()));
+ ASSERT_EQ(Timeout, EventLoopStart(3.0));
+ ASSERT_TRUE(api_executed_.load());
+}
--- /dev/null
+// Copyright 2016 Samsung Electronics. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef EWK_UNITTEST_UTC_BLINK_EWK_INTERCEPT_REQUEST_GET_BASE_H_
+#define EWK_UNITTEST_UTC_BLINK_EWK_INTERCEPT_REQUEST_GET_BASE_H_
+
+#include "utc_blink_ewk_base.h"
+
+#include <atomic>
+
+class utc_blink_ewk_intercept_request_get_base : public utc_blink_ewk_base {
+ protected:
+ static const std::string kInterceptURL;
+
+ utc_blink_ewk_intercept_request_get_base();
+ ~utc_blink_ewk_intercept_request_get_base() override;
+
+ void LoadFinished(Evas_Object* webview) override;
+ void pos_test();
+ void neg_test();
+ virtual void test_func(Ewk_Intercept_Request* intercept_request) = 0;
+
+ private:
+ static void callback_positive(Ewk_Context* /*ctx*/,
+ Ewk_Intercept_Request* intercept_request,
+ void* user_data);
+ static void callback_negative(Ewk_Context* /*ctx*/,
+ Ewk_Intercept_Request* /*intercept_request*/,
+ void* user_data);
+
+ std::atomic<bool> api_executed_;
+};
+
+#endif // EWK_UNITTEST_UTC_BLINK_EWK_INTERCEPT_REQUEST_GET_BASE_H_
--- /dev/null
+// Copyright 2016 Samsung Electronics. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <string>
+
+#include "utc_blink_ewk_intercept_request_get_base.h"
+
+class utc_blink_ewk_intercept_request_headers_get
+ : public utc_blink_ewk_intercept_request_get_base {
+ public:
+ utc_blink_ewk_intercept_request_headers_get() : headers_from_ewk_(nullptr) {}
+
+ protected:
+ void test_func(Ewk_Intercept_Request* intercept_request) override {
+ headers_from_ewk_ = ewk_intercept_request_headers_get(intercept_request);
+ if (headers_from_ewk_) {
+ const char* accept =
+ static_cast<const char*>(eina_hash_find(headers_from_ewk_, "Accept"));
+ if (accept) {
+ accept_header_from_ewk_ = accept;
+ }
+ const char* user_agent = static_cast<const char*>(
+ eina_hash_find(headers_from_ewk_, "User-Agent"));
+ if (user_agent) {
+ user_agent_header_from_ewk_ = user_agent;
+ }
+ }
+ }
+
+ const Eina_Hash* headers_from_ewk_;
+ std::string accept_header_from_ewk_;
+ std::string user_agent_header_from_ewk_;
+};
+
+/**
+ * @brief Tests if headers are returned for intercept request.
+ */
+TEST_F(utc_blink_ewk_intercept_request_headers_get, POS_TEST_HEADERS_GET) {
+ pos_test();
+ ASSERT_NE(nullptr, headers_from_ewk_);
+ EXPECT_NE(std::string::npos, accept_header_from_ewk_.find("text/html"))
+ << "Substring \"text/html\" not in "
+ << "\"" << accept_header_from_ewk_ << "\"." << std::endl;
+ EXPECT_NE(std::string::npos, user_agent_header_from_ewk_.find("KHTML"))
+ << "Substring \"KHTML\" not in "
+ << "\"" << user_agent_header_from_ewk_ << "\"." << std::endl;
+}
+
+/**
+ * @brief Tests if null headers are returned for null intercept request.
+ */
+TEST_F(utc_blink_ewk_intercept_request_headers_get, NEG_TEST_HEADERS_GET_NULL) {
+ neg_test();
+ ASSERT_EQ(nullptr, headers_from_ewk_);
+}
--- /dev/null
+// Copyright 2016 Samsung Electronics. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <string>
+
+#include "utc_blink_ewk_intercept_request_get_base.h"
+
+class utc_blink_ewk_intercept_request_http_method_get
+ : public utc_blink_ewk_intercept_request_get_base {
+ public:
+ utc_blink_ewk_intercept_request_http_method_get()
+ : http_method_from_ewk_ptr_(nullptr) {}
+
+ protected:
+ void test_func(Ewk_Intercept_Request* intercept_request) override {
+ http_method_from_ewk_ptr_ =
+ ewk_intercept_request_http_method_get(intercept_request);
+ if (http_method_from_ewk_ptr_) {
+ http_method_from_ewk_ = http_method_from_ewk_ptr_;
+ }
+ }
+
+ std::string http_method_from_ewk_;
+ const char* http_method_from_ewk_ptr_;
+};
+
+/**
+ * @brief Tests if correct http method is returned for intercept request.
+ */
+TEST_F(utc_blink_ewk_intercept_request_http_method_get, POS_TEST_METHOD_GET) {
+ pos_test();
+ ASSERT_EQ("GET", http_method_from_ewk_);
+}
+
+/**
+ * @brief Tests if null http method is returned for null intercept request.
+ */
+TEST_F(utc_blink_ewk_intercept_request_http_method_get,
+ NEG_TEST_METHOD_GET_NULL) {
+ neg_test();
+ ASSERT_EQ(nullptr, http_method_from_ewk_ptr_);
+}
--- /dev/null
+// Copyright 2016 Samsung Electronics. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "utc_blink_ewk_base.h"
+
+#include <string>
+
+#include "utc_blink_api_result_locked.h"
+
+static const char* const kTitleChangedCb = "title,changed";
+
+class utc_blink_ewk_intercept_request_ignore : public utc_blink_ewk_base {
+ protected:
+ static const char* kInterceptURL;
+
+ void LoadFinished(Evas_Object* webview) override {
+ // URL loads normally if intercept request is ignored in callback
+ const char* url = ewk_view_url_get(webview);
+ if (url)
+ url_ = url;
+ if (!title_.empty())
+ EventLoopStop(Success);
+ }
+
+ void PostSetUp() override {
+ evas_object_smart_callback_add(GetEwkWebView(), kTitleChangedCb,
+ TitleChanged, this);
+ }
+
+ void PreTearDown() override {
+ evas_object_smart_callback_del(GetEwkWebView(), kTitleChangedCb,
+ TitleChanged);
+ }
+
+ static void TitleChanged(void* data, Evas_Object*, void* event_info) {
+ if (!data) {
+ utc_message("TitleChanged :: data is null");
+ return;
+ }
+ auto owner = static_cast<utc_blink_ewk_intercept_request_ignore*>(data);
+ if (!event_info) {
+ utc_message("TitleChanged :: event_info is null");
+ return;
+ }
+ auto title = static_cast<char*>(event_info);
+ owner->title_ = title;
+ if (!owner->url_.empty())
+ owner->EventLoopStop(Success);
+ }
+
+ static void intercept_request_callback_ignore(
+ Ewk_Context* /*ctx*/,
+ Ewk_Intercept_Request* intercept_request,
+ void* user_data) {
+ auto* owner =
+ static_cast<utc_blink_ewk_intercept_request_ignore*>(user_data);
+ owner->api_result_ = ewk_intercept_request_ignore(intercept_request);
+ }
+
+ static void intercept_request_callback_ignore_null(
+ Ewk_Context* /*ctx*/,
+ Ewk_Intercept_Request* /*intercept_request*/,
+ void* user_data) {
+ auto* owner =
+ static_cast<utc_blink_ewk_intercept_request_ignore*>(user_data);
+ owner->api_result_ = ewk_intercept_request_ignore(nullptr);
+ }
+
+ std::string url_;
+ std::string title_;
+ ApiResultLocked<Eina_Bool> api_result_;
+};
+
+const char* utc_blink_ewk_intercept_request_ignore::kInterceptURL =
+ "http://www.google.com/";
+
+/**
+ * @brief Tests if url loads if intercept request is ignored.
+ */
+TEST_F(utc_blink_ewk_intercept_request_ignore, POS_TEST_IGNORE) {
+ ewk_context_intercept_request_callback_set(
+ ewk_view_context_get(GetEwkWebView()), intercept_request_callback_ignore,
+ this);
+
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), kInterceptURL));
+ ASSERT_EQ(Success, EventLoopStart());
+ ASSERT_TRUE(api_result_.IsSet());
+ EXPECT_TRUE(api_result_.Get());
+ EXPECT_NE(std::string::npos, url_.find("google"))
+ << "Substring \"google\" not in "
+ << "\"" << url_ << "\"." << std::endl;
+ EXPECT_NE(std::string::npos, title_.find("Google"))
+ << "Substring \"Google\" not in "
+ << "\"" << title_ << "\"." << std::endl;
+}
+
+/**
+ * @brief Tests if EINA_FALSE is returned for null intercept request.
+ */
+TEST_F(utc_blink_ewk_intercept_request_ignore, NEG_TEST_IGNORE_NULL) {
+ ewk_context_intercept_request_callback_set(
+ ewk_view_context_get(GetEwkWebView()),
+ intercept_request_callback_ignore_null, this);
+
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), kInterceptURL));
+ ASSERT_EQ(Timeout, EventLoopStart(3.0));
+ ASSERT_TRUE(api_result_.IsSet());
+ ASSERT_FALSE(api_result_.Get());
+}
--- /dev/null
+// Copyright 2016 Samsung Electronics. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <cstring>
+
+#include "utc_blink_ewk_intercept_request_response_base.h"
+
+const char* utc_blink_ewk_intercept_request_response_base::kInterceptURL =
+ "http://www.google.com/";
+
+const char* utc_blink_ewk_intercept_request_response_base::kBodyAjaxPart1 =
+ "<html><head><title>first intercepted</title></head>"
+ "<body><script>"
+ "function ajax_listener() {";
+
+const char* utc_blink_ewk_intercept_request_response_base::kBodyAjaxPart2 =
+ "}"
+ "var ajax = new XMLHttpRequest();"
+ "ajax.onload = ajax_listener;"
+ "ajax.open('GET', '";
+
+const char* utc_blink_ewk_intercept_request_response_base::kInterceptAjaxURL =
+ "http://www.google.com/ewk-test/";
+
+const char* utc_blink_ewk_intercept_request_response_base::kBodyAjaxPart3 =
+ "', true);"
+ "ajax.send();"
+ "</script>"
+ "</body></html>";
+
+utc_blink_ewk_intercept_request_response_base::
+ utc_blink_ewk_intercept_request_response_base()
+ : body_ajax_response_("AJAX"),
+ custom_response_status_text_(nullptr),
+ intercept_request_null_(false) {}
+
+utc_blink_ewk_intercept_request_response_base::
+ ~utc_blink_ewk_intercept_request_response_base() {}
+
+void utc_blink_ewk_intercept_request_response_base::PostSetUp() {
+ evas_object_smart_callback_add(GetEwkWebView(), "title,changed",
+ title_changed, this);
+}
+
+void utc_blink_ewk_intercept_request_response_base::PreTearDown() {
+ evas_object_smart_callback_del(GetEwkWebView(), "title,changed",
+ title_changed);
+}
+
+void utc_blink_ewk_intercept_request_response_base::LoadFinished(
+ Evas_Object* webview) {
+ // different title for first intercepted request
+ first_title_ = ewk_view_title_get(webview);
+}
+
+void utc_blink_ewk_intercept_request_response_base::check_results(
+ ApiResultLocked<ewk_callback_results>& results) {
+ ASSERT_TRUE(results.IsSet());
+ auto res = results.Get();
+ EXPECT_TRUE(res.status_set_);
+ EXPECT_TRUE(res.header_add_content_type_);
+ EXPECT_TRUE(res.header_add_content_length_);
+ EXPECT_TRUE(res.header_add_access_control_);
+ EXPECT_TRUE(res.body_set_);
+}
+
+void utc_blink_ewk_intercept_request_response_base::construct_page() {
+ body_ajax_ = kBodyAjaxPart1;
+ body_ajax_ += get_js_title_test();
+ body_ajax_ += kBodyAjaxPart2;
+ body_ajax_ += kInterceptAjaxURL;
+ body_ajax_ += kBodyAjaxPart3;
+}
+
+void utc_blink_ewk_intercept_request_response_base::title_changed(
+ void* data,
+ Evas_Object* webview,
+ void* event_info) {
+ auto* owner =
+ static_cast<utc_blink_ewk_intercept_request_response_base*>(data);
+ const char* title = ewk_view_title_get(owner->GetEwkWebView());
+
+ if (strcmp(title, "first intercepted") != 0) {
+ owner->EventLoopStop(Success);
+ }
+}
+
+void utc_blink_ewk_intercept_request_response_base::
+ intercept_request_callback_response_header_add(
+ Ewk_Context* /*ctx*/,
+ Ewk_Intercept_Request* intercept_request,
+ void* user_data) {
+ auto* owner =
+ static_cast<utc_blink_ewk_intercept_request_response_base*>(user_data);
+ const char* url = ewk_intercept_request_url_get(intercept_request);
+ int body_length;
+ const char* body;
+ ApiResultLocked<ewk_callback_results>* results;
+
+ if (strcmp(url, kInterceptAjaxURL) == 0) {
+ // intercept ajax request
+ body_length = strlen(owner->body_ajax_response_);
+ body = owner->body_ajax_response_;
+ results = &owner->ajax_ewk_results_;
+ } else if (strcmp(url, kInterceptURL) == 0) {
+ // intercept first page request
+ body_length = owner->body_ajax_.length();
+ body = owner->body_ajax_.c_str();
+ results = &owner->page_ewk_results_;
+ } else {
+ ewk_intercept_request_ignore(intercept_request);
+ return;
+ }
+ ewk_callback_results res;
+ res.status_set_ = ewk_intercept_request_response_status_set(
+ intercept_request, 200, owner->custom_response_status_text_);
+ res.header_add_content_type_ = ewk_intercept_request_response_header_add(
+ intercept_request, "Content-Type", "text/html; charset=UTF-8");
+ res.header_add_content_length_ = ewk_intercept_request_response_header_add(
+ intercept_request, "Content-Length", std::to_string(body_length).c_str());
+ res.header_add_access_control_ = ewk_intercept_request_response_header_add(
+ intercept_request, "Access-Control-Allow-Origin", "*");
+ owner->pos_func(intercept_request);
+ res.body_set_ = ewk_intercept_request_response_body_set(intercept_request,
+ body, body_length);
+ results->Set(std::move(res));
+}
+
+void utc_blink_ewk_intercept_request_response_base::
+ intercept_request_callback_response_header_add_null(
+ Ewk_Context* /*ctx*/,
+ Ewk_Intercept_Request* intercept_request,
+ void* user_data) {
+ auto* owner =
+ static_cast<utc_blink_ewk_intercept_request_response_base*>(user_data);
+
+ intercept_request =
+ owner->intercept_request_null_ ? nullptr : intercept_request;
+ owner->neg_api_result_ = owner->neg_func(intercept_request);
+}
+
+void utc_blink_ewk_intercept_request_response_base::pos_test() {
+ construct_page();
+ ewk_context_intercept_request_callback_set(
+ ewk_view_context_get(GetEwkWebView()),
+ intercept_request_callback_response_header_add, this);
+
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), kInterceptURL));
+ ASSERT_EQ(Success, EventLoopStart());
+ // initial title from HTML
+ EXPECT_EQ("first intercepted", first_title_);
+ check_results(page_ewk_results_);
+ check_results(ajax_ewk_results_);
+}
+
+void utc_blink_ewk_intercept_request_response_base::neg_test() {
+ ewk_context_intercept_request_callback_set(
+ ewk_view_context_get(GetEwkWebView()),
+ intercept_request_callback_response_header_add_null, this);
+
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), kInterceptURL));
+ ASSERT_EQ(Timeout, EventLoopStart(3.0));
+ ASSERT_TRUE(neg_api_result_.IsSet());
+ ASSERT_EQ(EINA_FALSE, neg_api_result_.Get());
+}
--- /dev/null
+// Copyright 2016 Samsung Electronics. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can b
+// found in the LICENSE file.
+
+#ifndef EWK_UNITTEST_UTC_BLINK_EWK_INTERCEPT_REQUEST_RESPONSE_BASE_H_
+#define EWK_UNITTEST_UTC_BLINK_EWK_INTERCEPT_REQUEST_RESPONSE_BASE_H_
+
+#include "utc_blink_ewk_base.h"
+
+#include <string>
+
+#include "utc_blink_api_result_locked.h"
+
+class utc_blink_ewk_intercept_request_response_base
+ : public utc_blink_ewk_base {
+ protected:
+ utc_blink_ewk_intercept_request_response_base();
+ ~utc_blink_ewk_intercept_request_response_base() override;
+
+ virtual void pos_func(Ewk_Intercept_Request* intercept_request) = 0;
+ virtual bool neg_func(Ewk_Intercept_Request* intercept_request) = 0;
+ virtual std::string get_js_title_test() = 0;
+
+ void PostSetUp() override;
+ void PreTearDown() override;
+ void LoadFinished(Evas_Object* webview) override;
+
+ void pos_test();
+ void neg_test();
+
+ const char* body_ajax_response_;
+ const char* custom_response_status_text_;
+ bool intercept_request_null_;
+
+ private:
+ struct ewk_callback_results {
+ bool status_set_;
+ bool header_add_content_type_;
+ bool header_add_content_length_;
+ bool header_add_access_control_;
+ bool body_set_;
+ };
+
+ static const char* kInterceptURL;
+ static const char* kInterceptAjaxURL;
+ static const char* kBodyAjaxPart1;
+ static const char* kBodyAjaxPart2;
+ static const char* kBodyAjaxPart3;
+
+ void check_results(ApiResultLocked<ewk_callback_results>& results);
+ void construct_page();
+
+ static void title_changed(void* data, Evas_Object* webview, void* event_info);
+
+ static void intercept_request_callback_response_header_add(
+ Ewk_Context* /*ctx*/,
+ Ewk_Intercept_Request* intercept_request,
+ void* user_data);
+
+ static void intercept_request_callback_response_header_add_null(
+ Ewk_Context* /*ctx*/,
+ Ewk_Intercept_Request* intercept_request,
+ void* user_data);
+
+ ApiResultLocked<ewk_callback_results> page_ewk_results_;
+ ApiResultLocked<ewk_callback_results> ajax_ewk_results_;
+ ApiResultLocked<Eina_Bool> neg_api_result_;
+ std::string first_title_;
+ std::string body_ajax_;
+};
+
+#endif // EWK_UNITTEST_UTC_BLINK_EWK_INTERCEPT_REQUEST_RESPONSE_BASE_H_
--- /dev/null
+// Copyright 2016 Samsung Electronics. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <string>
+
+#include "utc_blink_ewk_intercept_request_response_base.h"
+
+class utc_blink_ewk_intercept_request_response_body_set
+ : public utc_blink_ewk_intercept_request_response_base {
+ protected:
+ std::string get_js_title_test() override {
+ return std::string(body_ajax_test_);
+ }
+
+ void pos_func(Ewk_Intercept_Request* intercept_request) override {}
+
+ bool neg_func(Ewk_Intercept_Request* intercept_request) override {
+ return ewk_intercept_request_response_body_set(
+ intercept_request, body_ajax_response_, body_ajax_length_);
+ }
+
+ const char* body_ajax_test_ =
+ "document.title = this.responseText + ': ' + this.responseText.length;";
+
+ int body_ajax_length_;
+};
+
+/**
+ * @brief Tests if headers are correctly added from header map.
+ */
+TEST_F(utc_blink_ewk_intercept_request_response_body_set,
+ POS_TEST_RESPONSE_BODY_SET) {
+ body_ajax_response_ = "HELLO EWK API";
+ pos_test();
+ // title set in JS after ajax response:
+ // <AJAX_RESPONSE>: length(<AJAX_RESPONSE>)
+ EXPECT_STREQ("HELLO EWK API: 13", ewk_view_title_get(GetEwkWebView()));
+}
+
+/**
+ * @brief Tests if EINA_FALSE is returned for NULL body
+ */
+TEST_F(utc_blink_ewk_intercept_request_response_body_set, NEG_TEST_NULL_BODY) {
+ body_ajax_response_ = nullptr;
+ // some positive value, so safety checks for length won't interfere
+ body_ajax_length_ = 1;
+ neg_test();
+}
+
+/**
+ * @brief Tests if EINA_FALSE is returned for negative body length
+ */
+TEST_F(utc_blink_ewk_intercept_request_response_body_set,
+ NEG_TEST_NEGATIVE_BODY_LENGTH) {
+ body_ajax_length_ = -1;
+ neg_test();
+}
+
+/**
+ * @brief Tests if EINA_FALSE is returned for null intercept request.
+ */
+TEST_F(utc_blink_ewk_intercept_request_response_body_set,
+ NEG_TEST_NULL_INTERCEPT_RESPONSE) {
+ intercept_request_null_ = true;
+ body_ajax_length_ = strlen(body_ajax_response_);
+ neg_test();
+}
--- /dev/null
+// Copyright 2016 Samsung Electronics. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <string>
+
+#include "utc_blink_ewk_intercept_request_response_base.h"
+
+class utc_blink_ewk_intercept_request_response_header_add
+ : public utc_blink_ewk_intercept_request_response_base {
+ protected:
+ std::string get_js_title_test() override {
+ return std::string(body_ajax_test_);
+ }
+
+ void pos_func(Ewk_Intercept_Request* intercept_request) override {
+ header_add_result_field_1_ = ewk_intercept_request_response_header_add(
+ intercept_request, "TEST_FIELD_1", "TEST_VALUE_1");
+ header_add_result_field_2_ = ewk_intercept_request_response_header_add(
+ intercept_request, "TEST_FIELD_2", "TEST_VALUE_2");
+ }
+
+ bool neg_func(Ewk_Intercept_Request* intercept_request) override {
+ return ewk_intercept_request_response_header_add(
+ intercept_request, header_field_name_, header_field_value_);
+ }
+
+ const char* body_ajax_test_ =
+ "document.title = 'TEST_FIELD_1: '"
+ "+ this.getResponseHeader('TEST_FIELD_1') + ', TEST_FIELD_2: '"
+ "+ this.getResponseHeader('TEST_FIELD_2');";
+
+ const char* header_field_name_;
+ const char* header_field_value_;
+ bool header_add_result_field_1_;
+ bool header_add_result_field_2_;
+};
+
+/**
+ * @brief Tests if headers are correctly added.
+ */
+TEST_F(utc_blink_ewk_intercept_request_response_header_add,
+ POS_TEST_RESPONSE_HEADER_ADD) {
+ pos_test();
+ EXPECT_TRUE(header_add_result_field_1_);
+ EXPECT_TRUE(header_add_result_field_2_);
+ /*
+ * title set in JS after ajax response:
+ * TEST_FIELD_1: <header('TEST_FIELD_1')>, \
+ * TEST_FIELD_2: <header('TEST_FIELD_2')>
+ */
+ EXPECT_STREQ("TEST_FIELD_1: TEST_VALUE_1, TEST_FIELD_2: TEST_VALUE_2",
+ ewk_view_title_get(GetEwkWebView()));
+}
+
+/**
+ * @brief Tests if EINA_FALSE is returned for null header field name.
+ */
+TEST_F(utc_blink_ewk_intercept_request_response_header_add,
+ NEG_TEST_NULL_HEADER_FIELD_NAME) {
+ intercept_request_null_ = false;
+ header_field_name_ = nullptr;
+ header_field_value_ = "TEST";
+ neg_test();
+}
+
+/**
+ * @brief Tests if EINA_FALSE is returned for null header field value.
+ */
+TEST_F(utc_blink_ewk_intercept_request_response_header_add,
+ NEG_TEST_NULL_HEADER_FIELD_VALUE) {
+ intercept_request_null_ = false;
+ header_field_name_ = "Server";
+ header_field_value_ = nullptr;
+ neg_test();
+}
+
+/**
+ * @brief Tests if EINA_FALSE is returned for null intercept request.
+ */
+TEST_F(utc_blink_ewk_intercept_request_response_header_add,
+ NEG_TEST_NULL_INTERCEPT_RESPONSE) {
+ intercept_request_null_ = true;
+ header_field_name_ = "Server";
+ header_field_value_ = "TEST";
+ neg_test();
+}
--- /dev/null
+// Copyright 2016 Samsung Electronics. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <string>
+
+#include "utc_blink_ewk_intercept_request_response_base.h"
+
+class utc_blink_ewk_intercept_request_response_header_map_add
+ : public utc_blink_ewk_intercept_request_response_base {
+ protected:
+ utc_blink_ewk_intercept_request_response_header_map_add()
+ : header_map_(nullptr) {}
+
+ ~utc_blink_ewk_intercept_request_response_header_map_add() override {
+ if (header_map_)
+ eina_hash_free(header_map_);
+ }
+
+ std::string get_js_title_test() override {
+ return std::string(body_ajax_test_);
+ }
+
+ void pos_func(Ewk_Intercept_Request* intercept_request) override {
+ header_add_map_result_ = ewk_intercept_request_response_header_map_add(
+ intercept_request, header_map_);
+ }
+
+ bool neg_func(Ewk_Intercept_Request* intercept_request) override {
+ return ewk_intercept_request_response_header_map_add(intercept_request,
+ header_map_);
+ }
+
+ void build_header_map() {
+ header_map_ = eina_hash_string_small_new(nullptr);
+ eina_hash_add(header_map_, "TEST_FIELD_1", "TEST_VALUE_1");
+ eina_hash_add(header_map_, "TEST_FIELD_2", "TEST_VALUE_2");
+ }
+
+ const char* body_ajax_test_ =
+ "document.title = 'TEST_FIELD_1: '"
+ "+ this.getResponseHeader('TEST_FIELD_1') + ', TEST_FIELD_2: '"
+ "+ this.getResponseHeader('TEST_FIELD_2');";
+
+ bool header_add_map_result_;
+ Eina_Hash* header_map_;
+};
+
+/**
+ * @brief Tests if headers are correctly added from header map.
+ */
+TEST_F(utc_blink_ewk_intercept_request_response_header_map_add,
+ POS_TEST_RESPONSE_HEADER_ADD) {
+ build_header_map();
+ pos_test();
+ EXPECT_TRUE(header_add_map_result_);
+ /*
+ * title set in JS after ajax response:
+ * TEST_FIELD_1: <header('TEST_FIELD_1')>, \
+ * TEST_FIELD_2: <header('TEST_FIELD_2')>
+ */
+ EXPECT_STREQ("TEST_FIELD_1: TEST_VALUE_1, TEST_FIELD_2: TEST_VALUE_2",
+ ewk_view_title_get(GetEwkWebView()));
+}
+
+/**
+ * @brief Tests if EINA_FALSE is returned for null header map.
+ */
+TEST_F(utc_blink_ewk_intercept_request_response_header_map_add,
+ NEG_TEST_NULL_HEADER_FIELD_NAME) {
+ intercept_request_null_ = false;
+ header_map_ = nullptr;
+ neg_test();
+}
+
+/**
+ * @brief Tests if EINA_FALSE is returned for null intercept request.
+ */
+TEST_F(utc_blink_ewk_intercept_request_response_header_map_add,
+ NEG_TEST_NULL_INTERCEPT_RESPONSE) {
+ intercept_request_null_ = true;
+ build_header_map();
+ neg_test();
+}
--- /dev/null
+// Copyright 2016 Samsung Electronics. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "utc_blink_ewk_base.h"
+
+#include <cstring>
+#include <string>
+
+#include "utc_blink_api_result_locked.h"
+
+class utc_blink_ewk_intercept_request_response_set : public utc_blink_ewk_base {
+ public:
+ utc_blink_ewk_intercept_request_response_set() {
+ body_length_ = strlen(kBody);
+ int headers_length =
+ snprintf(nullptr, 0, kHeadersTemplate, body_length_) + 1; // for '\0'
+ headers_ = new char[headers_length];
+ snprintf(headers_, headers_length, kHeadersTemplate, body_length_);
+
+ body_ajax_length_ = strlen(kBodyAjax);
+ int headers_ajax_length =
+ snprintf(nullptr, 0, kHeadersTemplate, body_ajax_length_) +
+ 1; // for '\0'
+ headers_ajax_ = new char[headers_ajax_length];
+ snprintf(headers_ajax_, headers_ajax_length, kHeadersTemplate,
+ body_ajax_length_);
+
+ body_ajax_response_length_ = strlen(kBodyAjaxResponse);
+ int headers_ajax_response_length =
+ snprintf(nullptr, 0, kHeadersTemplate, body_ajax_response_length_) +
+ 1; // for '\0'
+ headers_ajax_response_ = new char[headers_ajax_response_length];
+ snprintf(headers_ajax_response_, headers_ajax_response_length,
+ kHeadersTemplate, body_ajax_response_length_);
+ }
+
+ ~utc_blink_ewk_intercept_request_response_set() override {
+ delete[] headers_;
+ delete[] headers_ajax_;
+ delete[] headers_ajax_response_;
+ }
+
+ protected:
+ static const char* kInterceptURL;
+ static const char* kHeadersTemplate;
+ static const char* kBody;
+ static const char* kBodyAjax;
+ static const char* kBodyAjaxResponse;
+
+ void PostSetUp() override {
+ evas_object_smart_callback_add(GetEwkWebView(), "title,changed",
+ title_changed, this);
+ }
+
+ void PreTearDown() override {
+ evas_object_smart_callback_del(GetEwkWebView(), "title,changed",
+ title_changed);
+ }
+
+ void LoadFinished(Evas_Object* webview) override {
+ // different title for first intercepted request
+ first_title_ = ewk_view_title_get(webview);
+ }
+
+ static void title_changed(void* data,
+ Evas_Object* webview,
+ void* event_info) {
+ auto* owner =
+ static_cast<utc_blink_ewk_intercept_request_response_set*>(data);
+ const char* title = ewk_view_title_get(owner->GetEwkWebView());
+ if (strcmp(title, "first intercepted") != 0) {
+ owner->EventLoopStop(Success);
+ }
+ }
+
+ static void intercept_request_callback_response_set_ajax(
+ Ewk_Context* /*ctx*/,
+ Ewk_Intercept_Request* intercept_request,
+ void* user_data) {
+ auto* owner =
+ static_cast<utc_blink_ewk_intercept_request_response_set*>(user_data);
+
+ const char* url = ewk_intercept_request_url_get(intercept_request);
+ if (strcmp(url, "http://www.google.com/ewk-test/") == 0) {
+ // intercept ajax request
+ owner->api_result_ajax_ = ewk_intercept_request_response_set(
+ intercept_request, owner->headers_ajax_response_, kBodyAjaxResponse,
+ owner->body_ajax_response_length_);
+ } else {
+ // intercept first page request
+ owner->api_result_page_ = ewk_intercept_request_response_set(
+ intercept_request, owner->headers_ajax_, kBodyAjax,
+ owner->body_ajax_length_);
+ }
+ }
+
+ static void intercept_request_callback_response_set_null_request_intercept(
+ Ewk_Context* /*ctx*/,
+ Ewk_Intercept_Request* /*intercept_request*/,
+ void* user_data) {
+ auto* owner =
+ static_cast<utc_blink_ewk_intercept_request_response_set*>(user_data);
+ owner->api_result_ = ewk_intercept_request_response_set(
+ nullptr, owner->headers_, kBody, owner->body_length_);
+ }
+
+ static void intercept_request_callback_response_set_null_headers(
+ Ewk_Context* /*ctx*/,
+ Ewk_Intercept_Request* intercept_request,
+ void* user_data) {
+ auto* owner =
+ static_cast<utc_blink_ewk_intercept_request_response_set*>(user_data);
+ owner->api_result_ = ewk_intercept_request_response_set(
+ intercept_request, nullptr, kBody, owner->body_length_);
+ }
+
+ static void intercept_request_callback_response_set_null_body(
+ Ewk_Context* /*ctx*/,
+ Ewk_Intercept_Request* intercept_request,
+ void* user_data) {
+ auto* owner =
+ static_cast<utc_blink_ewk_intercept_request_response_set*>(user_data);
+ owner->api_result_ = ewk_intercept_request_response_set(
+ intercept_request, owner->headers_, nullptr, owner->body_length_)
+ }
+
+ static void intercept_request_callback_response_set_negative_length(
+ Evas_Object* o,
+ Ewk_Intercept_Request* intercept_request,
+ void* user_data) {
+ auto* owner =
+ static_cast<utc_blink_ewk_intercept_request_response_set*>(user_data);
+ if (ewk_intercept_request_response_set(intercept_request, owner->headers_,
+ kBody, -1))
+ owner->EventLoopStop(Failure);
+ else
+ owner->EventLoopStop(Success);
+ }
+
+ int body_length_;
+ int body_ajax_length_;
+ int body_ajax_response_length_;
+ char* headers_;
+ char* headers_ajax_;
+ char* headers_ajax_response_;
+ std::string first_title_;
+ ApiResultLocked<Eina_Bool> api_result_;
+ ApiResultLocked<Eina_Bool> api_result_ajax_;
+ ApiResultLocked<Eina_Bool> api_result_page_;
+};
+
+const char* utc_blink_ewk_intercept_request_response_set::kInterceptURL =
+ "http://www.google.com/";
+
+const char* utc_blink_ewk_intercept_request_response_set::kHeadersTemplate =
+ "HTTP/1.1 200 OK\r\n"
+ "Content-Type: text/html; charset=UTF-8\r\n"
+ "Content-Length: %d\r\n"
+ "Access-Control-Allow-Origin: *\r\n"
+ "Server: TEST\r\n\r\n";
+
+const char* utc_blink_ewk_intercept_request_response_set::kBody =
+ "<html><head><title>intercepted</title></head>"
+ "<body>Hello, Request Intercept!</body></html>";
+
+const char* utc_blink_ewk_intercept_request_response_set::kBodyAjax =
+ "<html><head><title>first intercepted</title></head>"
+ "<body><script>"
+ "function ajax_listener() {"
+ "document.title = this.responseText + ' ' + this.status + ' ' + "
+ "this.statusText + ' ' + this.getResponseHeader('Server');"
+ "}"
+ "var ajax = new XMLHttpRequest();"
+ "ajax.onload = ajax_listener;"
+ "ajax.open('GET', 'http://www.google.com/ewk-test/', true);"
+ "ajax.send();"
+ "</script>"
+ "</body></html>";
+
+const char* utc_blink_ewk_intercept_request_response_set::kBodyAjaxResponse =
+ "AJAX";
+
+/**
+ * @brief Tests if body and custom headers are set.
+ */
+TEST_F(utc_blink_ewk_intercept_request_response_set, POS_TEST_RESPONSE_SET) {
+ ewk_context_intercept_request_callback_set(
+ ewk_view_context_get(GetEwkWebView()),
+ intercept_request_callback_response_set_ajax, this);
+
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), kInterceptURL));
+ ASSERT_EQ(Success, EventLoopStart());
+ EXPECT_FALSE(first_title_.empty());
+ EXPECT_EQ(std::string::npos, first_title_.find("Google"))
+ << "Substring \"Google\" in "
+ << "\"" << first_title_ << "\"." << std::endl;
+ EXPECT_NE(std::string::npos, first_title_.find("first intercepted"))
+ << "Substring \"first intercepted\" not in "
+ << "\"" << first_title_ << "\"." << std::endl;
+ ASSERT_TRUE(api_result_page_.IsSet());
+ ASSERT_EQ(EINA_TRUE, api_result_page_.Get());
+ ASSERT_TRUE(api_result_ajax_.IsSet());
+ ASSERT_EQ(EINA_TRUE, api_result_ajax_.Get());
+ // title set in JS after ajax response:
+ // <response_body> <status_code> <status_text> <header('Server')>
+ EXPECT_STREQ("AJAX 200 OK TEST", ewk_view_title_get(GetEwkWebView()));
+}
+
+/**
+ * @brief Tests if EINA_FALSE is returned for null intercept request.
+ */
+TEST_F(utc_blink_ewk_intercept_request_response_set,
+ NEG_TEST_NULL_INTERCEPT_RESPONSE) {
+ ewk_context_intercept_request_callback_set(
+ ewk_view_context_get(GetEwkWebView()),
+ intercept_request_callback_response_set_null_request_intercept, this);
+
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), kInterceptURL));
+ ASSERT_EQ(Timeout, EventLoopStart(3.0));
+ ASSERT_TRUE(api_result_.IsSet());
+ ASSERT_EQ(EINA_FALSE, api_result_.Get());
+}
+
+/**
+ * @brief Tests if EINA_FALSE is returned for null headers.
+ */
+TEST_F(utc_blink_ewk_intercept_request_response_set, NEG_TEST_NULL_HEADERS) {
+ ewk_context_intercept_request_callback_set(
+ ewk_view_context_get(GetEwkWebView()),
+ intercept_request_callback_response_set_null_headers, this);
+
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), kInterceptURL));
+ ASSERT_EQ(Timeout, EventLoopStart(3.0));
+ ASSERT_TRUE(api_result_.IsSet());
+ ASSERT_EQ(EINA_FALSE, api_result_.Get());
+}
+
+/**
+ * @brief Tests if EINA_FALSE is returned for null body.
+ */
+TEST_F(utc_blink_ewk_intercept_request_response_set, NEG_TEST_NULL_BODY) {
+ ewk_view_intercept_request_callback_set(
+ GetEwkWebView(), intercept_request_callback_response_set_null_body, this);
+
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), kInterceptURL));
+ ASSERT_EQ(Success, EventLoopStart());
+}
+
+/**
+ * @brief Tests if EINA_FALSE is returned for negative body length.
+ */
+TEST_F(utc_blink_ewk_intercept_request_response_set, NEG_TEST_NEGATIVE_LENGTH) {
+ ewk_context_intercept_request_callback_set(
+ ewk_view_context_get(GetEwkWebView()),
+ intercept_request_callback_response_set_negative_length, this);
+
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), kInterceptURL));
+ ASSERT_EQ(Timeout, EventLoopStart(3.0));
+ ASSERT_TRUE(api_result_.IsSet());
+ ASSERT_EQ(EINA_FALSE, api_result_.Get());
+}
--- /dev/null
+// Copyright 2016 Samsung Electronics. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <string>
+
+#include "utc_blink_ewk_intercept_request_response_base.h"
+
+class utc_blink_ewk_intercept_request_response_status_set
+ : public utc_blink_ewk_intercept_request_response_base {
+ protected:
+ std::string get_js_title_test() override {
+ return std::string(body_ajax_test_);
+ }
+
+ void pos_func(Ewk_Intercept_Request* intercept_request) override {}
+
+ bool neg_func(Ewk_Intercept_Request* intercept_request) override {
+ return ewk_intercept_request_response_status_set(nullptr, 200, "OK");
+ }
+
+ const char* body_ajax_test_ =
+ "document.title = this.status + ' ' + this.statusText;";
+};
+
+/**
+ * @brief Tests if status code and custom status text are set.
+ */
+TEST_F(utc_blink_ewk_intercept_request_response_status_set,
+ POS_TEST_RESPONSE_STATUS_SET) {
+ custom_response_status_text_ = "COOL";
+ pos_test();
+ // title set in JS after ajax response: <status_code> <status_text>
+ EXPECT_STREQ("200 COOL", ewk_view_title_get(GetEwkWebView()));
+}
+
+/**
+ * @brief Tests if status code and default status text are set.
+ */
+TEST_F(utc_blink_ewk_intercept_request_response_status_set,
+ POS_TEST_RESPONSE_STATUS_SET_DEFAULT_TEXT) {
+ custom_response_status_text_ = nullptr;
+ pos_test();
+ // title set in JS after ajax response: <status_code ><status_text>
+ EXPECT_STREQ("200 OK", ewk_view_title_get(GetEwkWebView()));
+}
+
+/**
+ * @brief Tests if EINA_FALSE is returned for null intercept request.
+ */
+TEST_F(utc_blink_ewk_intercept_request_response_status_set,
+ NEG_TEST_NULL_INTERCEPT_RESPONSE) {
+ intercept_request_null_ = true;
+ neg_test();
+}
--- /dev/null
+// Copyright 2016 Samsung Electronics. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <algorithm>
+#include <atomic>
+#include <cstring>
+#include <string>
+
+#include "ewk/unittest/utc_blink_ewk_base.h"
+
+class utc_blink_ewk_intercept_request_response_write_chunk
+ : public utc_blink_ewk_base {
+ public:
+ utc_blink_ewk_intercept_request_response_write_chunk()
+ : status_set_result_(false),
+ content_type_header_result_(false),
+ content_length_header_result_(false),
+ last_write_(true),
+ null_intercept_request_(false),
+ null_chunk_(false),
+ data_written_(0),
+ chunk_write_timer_(nullptr),
+ intercept_request_(nullptr),
+ callback_called_(false) {
+ body_.append(kBodyPre);
+ body_.append(kTitle);
+ body_.append(kBodyPost);
+ body_length_ = body_.length();
+ data_to_write_ = body_length_;
+ }
+
+ protected:
+ static const char* kInterceptURL;
+ static const char* kBodyPre;
+ static const char* kTitle;
+ static const char* kBodyPost;
+ // Chunk should be smaller than payload for this test.
+ static const size_t kDefaultChunkLength;
+
+ void LoadFinished(Evas_Object* webview) override { EventLoopStop(Success); }
+
+ void PostSetUp() override {
+ ewk_context_intercept_request_callback_set(
+ ewk_view_context_get(GetEwkWebView()), intercept_request_callback,
+ this);
+ }
+
+ void PreTearDown() override {
+ if (chunk_write_timer_)
+ ecore_timer_del(chunk_write_timer_);
+ }
+
+ void PrepareAndStartChunkWrite(MainLoopResult expected_result) {
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), kInterceptURL));
+ ASSERT_EQ(Timeout, EventLoopStart(3.0));
+ ASSERT_TRUE(callback_called_.load());
+ EXPECT_TRUE(status_set_result_);
+ EXPECT_TRUE(content_type_header_result_);
+ EXPECT_TRUE(content_length_header_result_);
+ SetTestJob(utc_blink_ewk_intercept_request_response_write_chunk::
+ job_do_chunk_write);
+ ASSERT_EQ(expected_result, EventLoopStart());
+ }
+
+ static void intercept_request_callback(
+ Ewk_Context* /*ctx*/,
+ Ewk_Intercept_Request* intercept_request,
+ void* user_data) {
+ auto* owner =
+ static_cast<utc_blink_ewk_intercept_request_response_write_chunk*>(
+ user_data);
+
+ const char* url = ewk_intercept_request_url_get(intercept_request);
+ if (strcmp(url, kInterceptURL) == 0) {
+ owner->status_set_result_ = ewk_intercept_request_response_status_set(
+ intercept_request, 200, nullptr);
+ owner->content_type_header_result_ =
+ ewk_intercept_request_response_header_add(
+ intercept_request, "Content-Type", "text/html; charset=UTF-8");
+ owner->content_length_header_result_ =
+ ewk_intercept_request_response_header_add(
+ intercept_request, "Content-Length",
+ std::to_string(owner->body_length_).c_str());
+ if (owner->null_intercept_request_)
+ owner->intercept_request_ = nullptr;
+ else
+ owner->intercept_request_ = intercept_request;
+ } else {
+ // Ignore any other request.
+ ewk_intercept_request_ignore(intercept_request);
+ }
+ owner->callback_called_.store(true);
+ }
+
+ static Eina_Bool chunk_write_callback(void* data) {
+ auto* owner =
+ static_cast<utc_blink_ewk_intercept_request_response_write_chunk*>(
+ data);
+ size_t to_write = std::min(kDefaultChunkLength, owner->data_to_write_);
+ if (to_write) {
+ const char* chunk = owner->null_chunk_
+ ? nullptr
+ : owner->body_.c_str() + owner->data_written_;
+ Eina_Bool write_success = ewk_intercept_request_response_write_chunk(
+ owner->intercept_request_, chunk, to_write);
+ if (!write_success) {
+ owner->EventLoopStop(Failure);
+ owner->chunk_write_timer_ = nullptr;
+ return ECORE_CALLBACK_CANCEL;
+ }
+ owner->data_to_write_ -= to_write;
+ owner->data_written_ += to_write;
+ return ECORE_CALLBACK_RENEW;
+ } else {
+ owner->last_write_ = ewk_intercept_request_response_write_chunk(
+ owner->intercept_request_, nullptr, 0);
+ owner->chunk_write_timer_ = nullptr;
+ return ECORE_CALLBACK_CANCEL;
+ }
+ }
+
+ static void job_do_chunk_write(utc_blink_ewk_base* data) {
+ auto owner =
+ static_cast<utc_blink_ewk_intercept_request_response_write_chunk*>(
+ data);
+ // Writing happens outside of callback.
+ // Use timer with non-zero timeout to show async nature of this API.
+ owner->chunk_write_timer_ =
+ ecore_timer_add(0.01, (Ecore_Task_Cb)chunk_write_callback, owner);
+ }
+
+ bool status_set_result_;
+ bool content_type_header_result_;
+ bool content_length_header_result_;
+ bool last_write_;
+
+ bool null_intercept_request_;
+ bool null_chunk_;
+ size_t data_to_write_;
+ size_t data_written_;
+ std::string body_;
+ size_t body_length_;
+ Ecore_Timer* chunk_write_timer_;
+ Ewk_Intercept_Request* intercept_request_;
+ std::atomic<bool> callback_called_;
+};
+
+const char*
+ utc_blink_ewk_intercept_request_response_write_chunk::kInterceptURL =
+ "http://request.intercept.ewk.api.test/";
+
+const char* utc_blink_ewk_intercept_request_response_write_chunk::kBodyPre =
+ "<html><head><title>";
+const char* utc_blink_ewk_intercept_request_response_write_chunk::kBodyPost =
+ "</title></head>"
+ "<body>Hello, Request Intercept!</body></html>";
+const char* utc_blink_ewk_intercept_request_response_write_chunk::kTitle =
+ "CHUNKED WRITE SUCCESS";
+const size_t
+ utc_blink_ewk_intercept_request_response_write_chunk::kDefaultChunkLength =
+ 5;
+
+/**
+ * @brief Tests if writing response in chunks for intercepted request results
+ * in expected web page.
+ */
+TEST_F(utc_blink_ewk_intercept_request_response_write_chunk,
+ POS_TEST_WRITE_RESPONSE_IN_CHUNKS) {
+ PrepareAndStartChunkWrite(Success);
+ EXPECT_FALSE(last_write_);
+ EXPECT_STREQ(kTitle, ewk_view_title_get(GetEwkWebView()));
+}
+
+/**
+ * @brief Tests if EINA_FALSE is returned for null intercept request.
+ */
+TEST_F(utc_blink_ewk_intercept_request_response_write_chunk,
+ NEG_TEST_NULL_INTERCEPT_REQUEST) {
+ null_intercept_request_ = true;
+ PrepareAndStartChunkWrite(Failure);
+}
+
+/**
+ * @brief Tests if EINA_FALSE is returned for null body chunk.
+ */
+TEST_F(utc_blink_ewk_intercept_request_response_write_chunk,
+ NEG_TEST_NULL_BODY_CHUNK) {
+ null_chunk_ = true;
+ PrepareAndStartChunkWrite(Failure);
+}
--- /dev/null
+// Copyright 2016 Samsung Electronics. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <string>
+
+#include "utc_blink_ewk_intercept_request_get_base.h"
+
+class utc_blink_ewk_intercept_request_scheme_get
+ : public utc_blink_ewk_intercept_request_get_base {
+ public:
+ utc_blink_ewk_intercept_request_scheme_get()
+ : scheme_from_ewk_ptr_(nullptr) {}
+
+ protected:
+ void test_func(Ewk_Intercept_Request* intercept_request) override {
+ scheme_from_ewk_ptr_ = ewk_intercept_request_scheme_get(intercept_request);
+ if (scheme_from_ewk_ptr_) {
+ scheme_from_ewk_ = scheme_from_ewk_ptr_;
+ }
+ }
+
+ std::string scheme_from_ewk_;
+ const char* scheme_from_ewk_ptr_;
+ static const std::string kInterceptScheme;
+};
+
+const std::string utc_blink_ewk_intercept_request_scheme_get::kInterceptScheme =
+ kInterceptURL.substr(0, kInterceptURL.find(':'));
+
+/**
+ * @brief Tests if correct scheme is returned for intercept request.
+ */
+TEST_F(utc_blink_ewk_intercept_request_scheme_get, POS_TEST_SCHEME_GET) {
+ pos_test();
+ ASSERT_EQ(kInterceptScheme, scheme_from_ewk_);
+}
+
+/**
+ * @brief Tests if null scheme is returned for null intercept request.
+ */
+TEST_F(utc_blink_ewk_intercept_request_scheme_get, NEG_TEST_SCHEME_GET_NULL) {
+ neg_test();
+ ASSERT_EQ(nullptr, scheme_from_ewk_ptr_);
+}
--- /dev/null
+// Copyright 2016 Samsung Electronics. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <string>
+
+#include "utc_blink_ewk_intercept_request_get_base.h"
+
+class utc_blink_ewk_intercept_request_url_get
+ : public utc_blink_ewk_intercept_request_get_base {
+ public:
+ utc_blink_ewk_intercept_request_url_get() : url_from_ewk_ptr_(nullptr) {}
+
+ protected:
+ void test_func(Ewk_Intercept_Request* intercept_request) override {
+ url_from_ewk_ptr_ = ewk_intercept_request_url_get(intercept_request);
+ if (url_from_ewk_ptr_) {
+ url_from_ewk_ = url_from_ewk_ptr_;
+ }
+ }
+
+ std::string url_from_ewk_;
+ const char* url_from_ewk_ptr_;
+};
+
+/**
+ * @brief Tests if correct url is returned for intercept request.
+ */
+TEST_F(utc_blink_ewk_intercept_request_url_get, POS_TEST_URL_GET) {
+ pos_test();
+ ASSERT_EQ(kInterceptURL, url_from_ewk_);
+}
+
+/**
+ * @brief Tests if null url is returned for null intercept request.
+ */
+TEST_F(utc_blink_ewk_intercept_request_url_get, NEG_TEST_URL_GET_NULL) {
+ neg_test();
+ ASSERT_EQ(nullptr, url_from_ewk_ptr_);
+}
--- /dev/null
+// Copyright 2016 Samsung Electronics. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "utc_blink_ewk_base.h"
+
+static const char* const kThemeColor1Url = "common/theme-color_1.html";
+static const char* const kThemeColor2Url = "common/theme-color_2.html";
+static const char* const kNoThemeColorUrl = "common/sample.html";
+
+class utc_blink_ewk_view_did_change_theme_color_callback_set
+ : public utc_blink_ewk_base {
+ public:
+ utc_blink_ewk_view_did_change_theme_color_callback_set()
+ : evas_object_(nullptr), url_loaded_(false) {}
+
+ void LoadFinished(Evas_Object* o) override { url_loaded_ = true; }
+
+ static void DidChangeThemeColorCallback(Evas_Object* o,
+ int r,
+ int g,
+ int b,
+ int a,
+ void* user_data) {
+ if (!user_data)
+ return;
+ auto owner =
+ static_cast<utc_blink_ewk_view_did_change_theme_color_callback_set*>(
+ user_data);
+ owner->evas_object_ = o;
+ owner->r_ = r;
+ owner->g_ = g;
+ owner->b_ = b;
+ owner->a_ = a;
+ owner->EventLoopStop(Success);
+ }
+
+ static void ThemeColor1UrlSetJob(utc_blink_ewk_base* data) {
+ auto owner =
+ static_cast<utc_blink_ewk_view_did_change_theme_color_callback_set*>(
+ data);
+ ewk_view_url_set(owner->GetEwkWebView(),
+ owner->GetResourceUrl(kThemeColor1Url).c_str());
+ }
+
+ static void ThemeColor2UrlSetJob(utc_blink_ewk_base* data) {
+ auto owner =
+ static_cast<utc_blink_ewk_view_did_change_theme_color_callback_set*>(
+ data);
+ ewk_view_url_set(owner->GetEwkWebView(),
+ owner->GetResourceUrl(kThemeColor2Url).c_str());
+ }
+
+ static void NoThemeColorUrlSetJob(utc_blink_ewk_base* data) {
+ auto owner =
+ static_cast<utc_blink_ewk_view_did_change_theme_color_callback_set*>(
+ data);
+ ewk_view_url_set(owner->GetEwkWebView(),
+ owner->GetResourceUrl(kNoThemeColorUrl).c_str());
+ }
+
+ protected:
+ int r_;
+ int g_;
+ int b_;
+ int a_;
+ Evas_Object* evas_object_;
+ Eina_Bool url_loaded_;
+};
+
+/**
+ * @brief Checks if color received in callback is same as in "theme-color" meta
+ * tag.
+ **/
+TEST_F(utc_blink_ewk_view_did_change_theme_color_callback_set,
+ POS_THEME_COLOR) {
+ ASSERT_EQ(EINA_TRUE, ewk_view_did_change_theme_color_callback_set(
+ GetEwkWebView(), DidChangeThemeColorCallback, this));
+ SetTestJob(ThemeColor1UrlSetJob);
+ ASSERT_EQ(Success, EventLoopStart());
+ ASSERT_EQ(GetEwkWebView(), evas_object_);
+ EXPECT_EQ(50, r_);
+ EXPECT_EQ(100, g_);
+ EXPECT_EQ(150, b_);
+ EXPECT_EQ(255, a_);
+}
+
+/**
+ * @brief Checks if callback is received only first time, when urls with same
+ * theme color are loaded one after another.
+ **/
+TEST_F(utc_blink_ewk_view_did_change_theme_color_callback_set,
+ POS_THEME_COLORS_SAME) {
+ ASSERT_EQ(EINA_TRUE, ewk_view_did_change_theme_color_callback_set(
+ GetEwkWebView(), DidChangeThemeColorCallback, this));
+ SetTestJob(ThemeColor1UrlSetJob);
+ ASSERT_EQ(Success, EventLoopStart());
+ ASSERT_EQ(GetEwkWebView(), evas_object_);
+ SetTestJob(ThemeColor1UrlSetJob);
+ ASSERT_EQ(Timeout, EventLoopStart(3.0));
+ ASSERT_TRUE(url_loaded_);
+}
+
+/**
+ * @brief Checks if callback is received twice first time, when urls with
+ * different theme color are loaded one after another.
+ **/
+TEST_F(utc_blink_ewk_view_did_change_theme_color_callback_set,
+ POS_THEME_COLORS_DIFFERENT) {
+ ASSERT_EQ(EINA_TRUE, ewk_view_did_change_theme_color_callback_set(
+ GetEwkWebView(), DidChangeThemeColorCallback, this));
+ SetTestJob(ThemeColor1UrlSetJob);
+ ASSERT_EQ(Success, EventLoopStart());
+ evas_object_ = nullptr;
+ SetTestJob(ThemeColor2UrlSetJob);
+ ASSERT_EQ(Success, EventLoopStart());
+ ASSERT_EQ(GetEwkWebView(), evas_object_);
+ EXPECT_EQ(100, r_);
+ EXPECT_EQ(150, g_);
+ EXPECT_EQ(200, b_);
+ EXPECT_EQ(255, a_);
+}
+
+/**
+ * @brief Checks if color is not received if url with no theme color is loaded
+ * as first one.
+ **/
+TEST_F(utc_blink_ewk_view_did_change_theme_color_callback_set,
+ POS_NO_THEME_COLOR) {
+ ASSERT_EQ(EINA_TRUE, ewk_view_did_change_theme_color_callback_set(
+ GetEwkWebView(), DidChangeThemeColorCallback, this));
+ SetTestJob(NoThemeColorUrlSetJob);
+ ASSERT_EQ(Timeout, EventLoopStart(3.0));
+ ASSERT_TRUE(url_loaded_);
+}
+
+/**
+ * @brief Checks if callback is received if url with no theme color is loaded
+ * after url with theme color.
+ **/
+TEST_F(utc_blink_ewk_view_did_change_theme_color_callback_set,
+ POS_NO_THEME_COLOR_AFTER_THEME_COLOR) {
+ ASSERT_EQ(EINA_TRUE, ewk_view_did_change_theme_color_callback_set(
+ GetEwkWebView(), DidChangeThemeColorCallback, this));
+ SetTestJob(ThemeColor1UrlSetJob);
+ ASSERT_EQ(Success, EventLoopStart());
+ SetTestJob(NoThemeColorUrlSetJob);
+ ASSERT_EQ(Success, EventLoopStart());
+ ASSERT_EQ(GetEwkWebView(), evas_object_);
+ EXPECT_EQ(0, r_);
+ EXPECT_EQ(0, g_);
+ EXPECT_EQ(0, b_);
+ EXPECT_EQ(0, a_);
+}
+
+/**
+ * @brief Checks if callback is reset properly.
+ **/
+TEST_F(utc_blink_ewk_view_did_change_theme_color_callback_set,
+ POS_RESET_CALLBACK) {
+ ASSERT_EQ(EINA_TRUE, ewk_view_did_change_theme_color_callback_set(
+ GetEwkWebView(), DidChangeThemeColorCallback, this));
+ SetTestJob(ThemeColor1UrlSetJob);
+ ASSERT_EQ(Success, EventLoopStart());
+ ASSERT_EQ(EINA_TRUE, ewk_view_did_change_theme_color_callback_set(
+ GetEwkWebView(), nullptr, this));
+ SetTestJob(ThemeColor2UrlSetJob);
+ ASSERT_EQ(Timeout, EventLoopStart(3.0));
+ ASSERT_TRUE(url_loaded_);
+}
+
+/**
+ * @brief Checks if fails with webview being null.
+ **/
+TEST_F(utc_blink_ewk_view_did_change_theme_color_callback_set,
+ NEG_INVALID_WEBVIEW) {
+ ASSERT_EQ(EINA_FALSE, ewk_view_did_change_theme_color_callback_set(
+ nullptr, DidChangeThemeColorCallback, this));
+}
--- /dev/null
+// Copyright 2016 Samsung Electronics. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "utc_blink_ewk_base.h"
+
+static const char* kURL = "/ewk_view/index_big_red_square.html";
+
+class utc_blink_ewk_view_horizontal_panning_hold_get
+ : public utc_blink_ewk_base {
+ protected:
+ void LoadFinished(Evas_Object*) override { EventLoopStop(Success); }
+};
+
+TEST_F(utc_blink_ewk_view_horizontal_panning_hold_get, POS_HOLD_DEFAULT) {
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), GetResourceUrl(kURL).c_str()));
+ ASSERT_EQ(Success, EventLoopStart());
+
+ ASSERT_FALSE(ewk_view_horizontal_panning_hold_get(GetEwkWebView()));
+}
+
+TEST_F(utc_blink_ewk_view_horizontal_panning_hold_get, POS_HOLD_TRUE) {
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), GetResourceUrl(kURL).c_str()));
+ ASSERT_EQ(Success, EventLoopStart());
+
+ ewk_view_horizontal_panning_hold_set(GetEwkWebView(), EINA_TRUE);
+ ASSERT_TRUE(ewk_view_horizontal_panning_hold_get(GetEwkWebView()));
+}
+
+TEST_F(utc_blink_ewk_view_horizontal_panning_hold_get, POS_HOLD_FALSE) {
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), GetResourceUrl(kURL).c_str()));
+ ASSERT_EQ(Success, EventLoopStart());
+
+ ewk_view_horizontal_panning_hold_set(GetEwkWebView(), EINA_FALSE);
+ ASSERT_FALSE(ewk_view_horizontal_panning_hold_get(GetEwkWebView()));
+}
+
+TEST_F(utc_blink_ewk_view_horizontal_panning_hold_get, NEG_INVALID_VIEW) {
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), GetResourceUrl(kURL).c_str()));
+ ASSERT_EQ(Success, EventLoopStart());
+
+ ewk_view_horizontal_panning_hold_set(GetEwkWebView(), EINA_TRUE);
+ ASSERT_FALSE(ewk_view_horizontal_panning_hold_get(nullptr));
+}
--- /dev/null
+// Copyright 2016 Samsung Electronics. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "utc_blink_ewk_base.h"
+
+static const char* kURL = "/ewk_view/index_big_red_square.html";
+static const int kFirstTouchPosition = 500;
+static const double kTouchEventInterval = 0.012;
+
+class utc_blink_ewk_view_horizontal_panning_hold_set
+ : public utc_blink_ewk_base {
+ protected:
+ void LoadFinished(Evas_Object*) override { EventLoopStop(Success); }
+
+ // Move touch point from (500, 500) to (400, 400).
+ void Panning() {
+ Ewk_Touch_Point* touch_point = new Ewk_Touch_Point;
+ touch_point->id = 0;
+ touch_point->x = kFirstTouchPosition;
+ touch_point->y = kFirstTouchPosition;
+ touch_point->state = EVAS_TOUCH_POINT_DOWN;
+
+ Eina_List* list = nullptr;
+ list = eina_list_append(list, touch_point);
+
+ ewk_view_feed_touch_event(GetEwkWebView(), EWK_TOUCH_START, list, nullptr);
+
+ for (int i = 1; i <= 10; ++i) {
+ touch_point->x = kFirstTouchPosition - i * 10;
+ touch_point->y = kFirstTouchPosition - i * 10;
+ touch_point->state = EVAS_TOUCH_POINT_MOVE;
+
+ ewk_view_feed_touch_event(GetEwkWebView(), EWK_TOUCH_MOVE, list, nullptr);
+ EventLoopWait(kTouchEventInterval);
+ }
+
+ eina_list_free(list);
+ delete touch_point;
+ }
+};
+
+TEST_F(utc_blink_ewk_view_horizontal_panning_hold_set, POS_HOLD_TRUE) {
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), GetResourceUrl(kURL).c_str()));
+ ASSERT_EQ(Success, EventLoopStart());
+
+ ewk_view_touch_events_enabled_set(GetEwkWebView(), EINA_TRUE);
+ ewk_view_horizontal_panning_hold_set(GetEwkWebView(), EINA_TRUE);
+ Panning();
+ EventLoopWait(1.0);
+
+ int x, y;
+ ASSERT_TRUE(ewk_view_scroll_pos_get(GetEwkWebView(), &x, &y));
+ EXPECT_NE(0, y);
+ EXPECT_EQ(0, x);
+}
+
+TEST_F(utc_blink_ewk_view_horizontal_panning_hold_set, POS_HOLD_FALSE) {
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), GetResourceUrl(kURL).c_str()));
+ ASSERT_EQ(Success, EventLoopStart());
+
+ ewk_view_touch_events_enabled_set(GetEwkWebView(), EINA_TRUE);
+ ewk_view_horizontal_panning_hold_set(GetEwkWebView(), EINA_FALSE);
+ Panning();
+ EventLoopWait(1.0);
+
+ int x, y;
+ ASSERT_TRUE(ewk_view_scroll_pos_get(GetEwkWebView(), &x, &y));
+ EXPECT_NE(0, x);
+ EXPECT_NE(0, y);
+}
+
+TEST_F(utc_blink_ewk_view_horizontal_panning_hold_set, NEG_INVALID_VIEW) {
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), GetResourceUrl(kURL).c_str()));
+ ASSERT_EQ(Success, EventLoopStart());
+
+ ewk_view_touch_events_enabled_set(GetEwkWebView(), EINA_TRUE);
+ ewk_view_horizontal_panning_hold_set(nullptr, EINA_TRUE);
+ Panning();
+ EventLoopWait(1.0);
+
+ int x, y;
+ ASSERT_TRUE(ewk_view_scroll_pos_get(GetEwkWebView(), &x, &y));
+ EXPECT_NE(0, x);
+ EXPECT_NE(0, y);
+}
#include "utc_blink_ewk_base.h"
-class utc_blink_ewk_view_page_visibility_state_set : public utc_blink_ewk_base
-{
+static const char* const kUrl = "common/sample.html";
+
+class utc_blink_ewk_view_page_visibility_state_set : public utc_blink_ewk_base {
+ private:
+ void LoadFinished(Evas_Object* webview) override { EventLoopStop(Success); }
};
-TEST_F(utc_blink_ewk_view_page_visibility_state_set, POS_TEST1)
-{
- Ewk_Page_Visibility_State test_state = EWK_PAGE_VISIBILITY_STATE_HIDDEN;
- Eina_Bool result = ewk_view_page_visibility_state_set(GetEwkWebView(), test_state, EINA_TRUE);
- utc_check_eq(result, EINA_TRUE);
+TEST_F(utc_blink_ewk_view_page_visibility_state_set, POS_STATE_HIDDEN) {
+ Eina_Bool result =
+ ewk_view_url_set(GetEwkWebView(), GetResourceUrl(kUrl).c_str());
+ ASSERT_EQ(EINA_TRUE, result);
+ ASSERT_EQ(Success, EventLoopStart());
+ result = ewk_view_page_visibility_state_set(
+ GetEwkWebView(), EWK_PAGE_VISIBILITY_STATE_HIDDEN, EINA_TRUE);
+ ASSERT_EQ(EINA_TRUE, result);
+}
+
+TEST_F(utc_blink_ewk_view_page_visibility_state_set, POS_STATE_VISIBLE) {
+ Eina_Bool result =
+ ewk_view_url_set(GetEwkWebView(), GetResourceUrl(kUrl).c_str());
+ ASSERT_EQ(EINA_TRUE, result);
+ ASSERT_EQ(Success, EventLoopStart());
+ result = ewk_view_page_visibility_state_set(
+ GetEwkWebView(), EWK_PAGE_VISIBILITY_STATE_VISIBLE, EINA_FALSE);
+ ASSERT_EQ(EINA_TRUE, result);
+}
+
+TEST_F(utc_blink_ewk_view_page_visibility_state_set,
+ NEG_NO_CONTEXT_STATE_HIDDEN) {
+ Eina_Bool result = ewk_view_page_visibility_state_set(
+ GetEwkWebView(), EWK_PAGE_VISIBILITY_STATE_HIDDEN, EINA_TRUE);
+ ASSERT_EQ(EINA_FALSE, result);
+}
+
+TEST_F(utc_blink_ewk_view_page_visibility_state_set,
+ NEG_NO_CONTEXT_STATE_VISIBLE) {
+ Eina_Bool result = ewk_view_page_visibility_state_set(
+ GetEwkWebView(), EWK_PAGE_VISIBILITY_STATE_VISIBLE, EINA_TRUE);
+ ASSERT_EQ(EINA_FALSE, result);
}
-TEST_F(utc_blink_ewk_view_page_visibility_state_set, POS_TEST2)
-{
- Ewk_Page_Visibility_State test_state = EWK_PAGE_VISIBILITY_STATE_VISIBLE;
- Eina_Bool result = ewk_view_page_visibility_state_set(GetEwkWebView(), test_state, EINA_FALSE);
- utc_check_eq(result, EINA_TRUE);
+TEST_F(utc_blink_ewk_view_page_visibility_state_set, NEG_INVALID_WEBVIEW) {
+ Eina_Bool result =
+ ewk_view_url_set(GetEwkWebView(), GetResourceUrl(kUrl).c_str());
+ ASSERT_EQ(EINA_TRUE, result);
+ ASSERT_EQ(Success, EventLoopStart());
+ result = ewk_view_page_visibility_state_set(
+ NULL, EWK_PAGE_VISIBILITY_STATE_HIDDEN, EINA_TRUE);
+ ASSERT_EQ(EINA_FALSE, result);
}
-TEST_F(utc_blink_ewk_view_page_visibility_state_set, NEG_TEST)
-{
- Ewk_Page_Visibility_State test_state = EWK_PAGE_VISIBILITY_STATE_HIDDEN;
- Eina_Bool result = ewk_view_page_visibility_state_set(NULL, test_state, EINA_FALSE);
- utc_check_eq(result, EINA_FALSE);
+TEST_F(utc_blink_ewk_view_page_visibility_state_set, NEG_PRERENDER_STATE) {
+ Eina_Bool result =
+ ewk_view_url_set(GetEwkWebView(), GetResourceUrl(kUrl).c_str());
+ ASSERT_EQ(EINA_TRUE, result);
+ ASSERT_EQ(Success, EventLoopStart());
+ result = ewk_view_page_visibility_state_set(
+ GetEwkWebView(), EWK_PAGE_VISIBILITY_STATE_PRERENDER, EINA_TRUE);
+ ASSERT_EQ(EINA_FALSE, result);
}
#include "utc_blink_ewk_base.h"
-class utc_blink_ewk_view_scroll_pos_get : public utc_blink_ewk_base
-{
- protected:
- void PostSetUp() override
- {
- evas_object_smart_callback_add(GetEwkWebView(), "contents,size,changed", contentsSizeChanged, this);
- }
-
- void PreTearDown() override
- {
- evas_object_smart_callback_del(GetEwkWebView(), "contents,size,changed", contentsSizeChanged);
- }
-
- static void contentsSizeChanged(void* data, Evas_Object* eObject, void* dataFinished)
- {
- utc_message("[contentsSizeChanged] :: \n");
- if(data)
- static_cast<utc_blink_ewk_view_scroll_pos_get*>(data)->EventLoopStop(Success);
- }
-protected:
- static const char* resource;
-};
+const char* const kUrl = "ewk_view/index_big_red_square.html";
+
+const int kScrollX = 2;
+const int kScrollY = 3;
-const char* utc_blink_ewk_view_scroll_pos_get::resource="/ewk_view/index_big_red_square.html";
+class utc_blink_ewk_view_scroll_pos_get : public utc_blink_ewk_base {
+ private:
+ void LoadFinished(Evas_Object* o) override { EventLoopStop(Success); }
+};
/**
- * @brief Positive test case of ewk_view_scroll_pos_get(), setting scroll position against after set, and scroll
- */
-TEST_F(utc_blink_ewk_view_scroll_pos_get, POS_TEST1)
-{
- ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(),GetResourceUrl(resource).c_str()));
+ * * @brief Check if api succeeds with no scroll previously set
+ * */
+TEST_F(utc_blink_ewk_view_scroll_pos_get, POS_NO_SET) {
+ ASSERT_EQ(EINA_TRUE,
+ ewk_view_url_set(GetEwkWebView(), GetResourceUrl(kUrl).c_str()));
ASSERT_EQ(Success, EventLoopStart());
int x = 0, y = 0;
- const int valScrollSet = 2;
-
- ASSERT_TRUE(ewk_view_scroll_set(GetEwkWebView(), valScrollSet, valScrollSet));
- ASSERT_TRUE(ewk_view_scroll_pos_get(GetEwkWebView(), &x, &y));
-
- ASSERT_TRUE(x == valScrollSet && y == valScrollSet);
+ Eina_Bool result = ewk_view_scroll_pos_get(GetEwkWebView(), &x, &y);
+ ASSERT_EQ(EINA_TRUE, result);
+ EXPECT_EQ(0, x);
+ EXPECT_EQ(0, y);
}
/**
- * @brief Positive test case of ewk_view_scroll_pos_get(), setting scroll position against after set, and scroll
- */
-TEST_F(utc_blink_ewk_view_scroll_pos_get, POS_TEST2)
-{
- int x = 0, y = 0;
- const int valScrollSet = -12 ;
-
- ASSERT_TRUE(ewk_view_scroll_set(GetEwkWebView(), valScrollSet, valScrollSet));
- ASSERT_TRUE(ewk_view_scroll_pos_get(GetEwkWebView(), &x, &y));
+ * * @brief Check if scroll value got equals to positive value set
+ * */
+TEST_F(utc_blink_ewk_view_scroll_pos_get, POS) {
+ ASSERT_EQ(EINA_TRUE,
+ ewk_view_url_set(GetEwkWebView(), GetResourceUrl(kUrl).c_str()));
+ ASSERT_EQ(Success, EventLoopStart());
- ASSERT_TRUE(x == 0 && y == 0);
+ Eina_Bool result = ewk_view_scroll_set(GetEwkWebView(), kScrollX, kScrollY);
+ ASSERT_EQ(EINA_TRUE, result);
+ int x = 0, y = 0;
+ result = ewk_view_scroll_pos_get(GetEwkWebView(), &x, &y);
+ ASSERT_EQ(EINA_TRUE, result);
+ EXPECT_EQ(kScrollX, x);
+ EXPECT_EQ(kScrollY, y);
}
/**
- * @brief ewk_view_scroll_pos_get() should return the same value as it has been set if main loop wasn't fired
- */
-TEST_F(utc_blink_ewk_view_scroll_pos_get, POS_TEST3)
-{
- int x = 0, y = 0;
-
- ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(),GetResourceUrl(resource).c_str()));
+ * * @brief Check if scroll value got equals to positive value set called
+ * twice
+ * */
+TEST_F(utc_blink_ewk_view_scroll_pos_get, POS_TWICE) {
+ ASSERT_EQ(EINA_TRUE,
+ ewk_view_url_set(GetEwkWebView(), GetResourceUrl(kUrl).c_str()));
ASSERT_EQ(Success, EventLoopStart());
- ASSERT_TRUE(ewk_view_scroll_set(GetEwkWebView(), 10, 10));
- ASSERT_TRUE(ewk_view_scroll_pos_get(GetEwkWebView(), &x, &y));
- ASSERT_EQ(10, x);
- ASSERT_EQ(10, y);
-
- ASSERT_TRUE(ewk_view_scroll_set(GetEwkWebView(), 20, 20));
- ASSERT_TRUE(ewk_view_scroll_pos_get(GetEwkWebView(), &x, &y));
- ASSERT_EQ(20, x);
- ASSERT_EQ(20, y);
+ Eina_Bool result = ewk_view_scroll_set(GetEwkWebView(), kScrollX, kScrollY);
+ ASSERT_EQ(EINA_TRUE, result);
+ int x = 0, y = 0;
+ result = ewk_view_scroll_pos_get(GetEwkWebView(), &x, &y);
+ ASSERT_EQ(EINA_TRUE, result);
+ EXPECT_EQ(kScrollX, x);
+ EXPECT_EQ(kScrollY, y);
+ result = ewk_view_scroll_set(GetEwkWebView(), kScrollY, kScrollX);
+ ASSERT_EQ(EINA_TRUE, result);
+ result = ewk_view_scroll_pos_get(GetEwkWebView(), &x, &y);
+ ASSERT_EQ(EINA_TRUE, result);
+ EXPECT_EQ(kScrollY, x);
+ EXPECT_EQ(kScrollX, y);
}
/**
- * @brief ewk_view_scroll_pos_get() should return proper value after the engine tries to scroll over the page size
- */
-TEST_F(utc_blink_ewk_view_scroll_pos_get, POS_TEST4)
-{
- int x = 0, y = 0;
-
- ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(),GetResourceUrl(resource).c_str()));
+ * * @brief Check if x scroll value got equals to positive x value set
+ * * while y passed is null.
+ * */
+TEST_F(utc_blink_ewk_view_scroll_pos_get, POS_SCROLL_Y_NULL) {
+ ASSERT_EQ(EINA_TRUE,
+ ewk_view_url_set(GetEwkWebView(), GetResourceUrl(kUrl).c_str()));
ASSERT_EQ(Success, EventLoopStart());
- int scrollSizeX = -1, scrollSizeY = -1;
- ASSERT_TRUE(ewk_view_scroll_size_get(GetEwkWebView(), &scrollSizeX, &scrollSizeY));
-
- int oversizeX = scrollSizeX + 100;
- ASSERT_TRUE(ewk_view_scroll_set(GetEwkWebView(), oversizeX, 10));
- ASSERT_TRUE(ewk_view_scroll_pos_get(GetEwkWebView(), &x, &y));
- ASSERT_EQ(scrollSizeX, x);
- ASSERT_EQ(10, y);
-
- ASSERT_TRUE(EventLoopWait(1));
+ Eina_Bool result = ewk_view_scroll_set(GetEwkWebView(), kScrollX, kScrollY);
+ ASSERT_EQ(EINA_TRUE, result);
+ int x = 0;
+ result = ewk_view_scroll_pos_get(GetEwkWebView(), &x, NULL);
+ ASSERT_EQ(EINA_TRUE, result);
+ EXPECT_EQ(kScrollX, x);
+}
- ASSERT_TRUE(ewk_view_scroll_pos_get(GetEwkWebView(), &x, &y));
- ASSERT_NE(scrollSizeX, x);
- ASSERT_EQ(10, y);
+/**
+ * * @brief Check if y scroll value got equals to positive y value set
+ * * while x passed is null.
+ * */
+TEST_F(utc_blink_ewk_view_scroll_pos_get, POS_SCROLL_X_NULL) {
+ ASSERT_EQ(EINA_TRUE,
+ ewk_view_url_set(GetEwkWebView(), GetResourceUrl(kUrl).c_str()));
+ ASSERT_EQ(Success, EventLoopStart());
- // Now at the end of the page
- ASSERT_TRUE(ewk_view_scroll_set(GetEwkWebView(), oversizeX, 10));
- ASSERT_TRUE(EventLoopWait(1));
- ASSERT_TRUE(ewk_view_scroll_pos_get(GetEwkWebView(), &x, &y));
- ASSERT_EQ(scrollSizeX, x);
+ Eina_Bool result = ewk_view_scroll_set(GetEwkWebView(), kScrollX, kScrollY);
+ ASSERT_EQ(EINA_TRUE, result);
+ int y = 0;
+ result = ewk_view_scroll_pos_get(GetEwkWebView(), NULL, &y);
+ ASSERT_EQ(EINA_TRUE, result);
+ EXPECT_EQ(kScrollY, y);
}
/**
- * @brief Same as POS_TEST4, but with negative value
- */
-TEST_F(utc_blink_ewk_view_scroll_pos_get, POS_TEST5)
-{
- int x = 0, y = 0;
-
- ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(),GetResourceUrl(resource).c_str()));
+ * * @brief Check if api succeeds if x and y values passed are null
+ * */
+TEST_F(utc_blink_ewk_view_scroll_pos_get, POS_SCROLL_X_Y_NULL) {
+ ASSERT_EQ(EINA_TRUE,
+ ewk_view_url_set(GetEwkWebView(), GetResourceUrl(kUrl).c_str()));
ASSERT_EQ(Success, EventLoopStart());
- ASSERT_TRUE(ewk_view_scroll_set(GetEwkWebView(), -100, 10));
- ASSERT_TRUE(ewk_view_scroll_pos_get(GetEwkWebView(), &x, &y));
- ASSERT_EQ(0, x);
- ASSERT_EQ(10, y);
-
- ASSERT_TRUE(EventLoopWait(1));
+ Eina_Bool result = ewk_view_scroll_set(GetEwkWebView(), kScrollX, kScrollY);
+ ASSERT_EQ(EINA_TRUE, result);
+ result = ewk_view_scroll_pos_get(GetEwkWebView(), NULL, NULL);
+ ASSERT_EQ(EINA_TRUE, result);
+}
- ASSERT_TRUE(ewk_view_scroll_pos_get(GetEwkWebView(), &x, &y));
- ASSERT_EQ(0, x);
- ASSERT_EQ(10, y);
+/**
+ * * @brief Check if api returns EINA_FALSE for no context initialized
+ * */
+TEST_F(utc_blink_ewk_view_scroll_pos_get, NEG_NO_CONTEXT) {
+ int x, y;
+ ASSERT_EQ(EINA_FALSE, ewk_view_scroll_pos_get(GetEwkWebView(), &x, &y));
}
/**
- * @brief Negative test case of ewk_view_scroll_pos_get(), testing for null
- */
-TEST_F(utc_blink_ewk_view_scroll_pos_get, NEG_TEST)
-{
- int x,y;
- Eina_Bool result = ewk_view_scroll_pos_get(NULL, &x, &y);
- utc_check_eq(result, EINA_FALSE);
+ * * @brief Check if api returns EINA_FALSE for null webview
+ * */
+TEST_F(utc_blink_ewk_view_scroll_pos_get, NEG_INVALID_WEBVIEW) {
+ int x, y;
+ ASSERT_EQ(EINA_FALSE, ewk_view_scroll_pos_get(NULL, &x, &y));
}
#include "utc_blink_ewk_base.h"
-class utc_blink_ewk_view_scroll_set : public utc_blink_ewk_base
-{
- protected:
- static void contentsSizeChanged(void* data, Evas_Object* eObject, void* dataFinished)
- {
- utc_message("[contentsSizeChanged] :: \n");
- if(data)
- static_cast<utc_blink_ewk_view_scroll_set*>(data)->EventLoopStop(Success);
- }
+const int kScrollX = 2;
+const int kScrollY = 3;
- /* Startup function */
- void PostSetUp() override
- {
- evas_object_smart_callback_add(GetEwkWebView(), "contents,size,changed", contentsSizeChanged, this);
- }
-
- /* Cleanup function */
- void PreTearDown() override
- {
- evas_object_smart_callback_del(GetEwkWebView(), "contents,size,changed", contentsSizeChanged);
- }
-
-protected:
- static const char*const resource;
+class utc_blink_ewk_view_scroll_set : public utc_blink_ewk_base {
+ private:
+ void LoadFinished(Evas_Object* o) override { EventLoopStop(Success); }
};
-const char*const utc_blink_ewk_view_scroll_set::resource="/ewk_view/index_big_red_square.html";
-
/**
- * @brief Positive test case of ewk_view_scroll_set(),tseting scroll postion against after set, and scroll
+ * @brief Check if setting positive scroll values works
*/
+TEST_F(utc_blink_ewk_view_scroll_set, POS_SCROLL_POSITIVE) {
+ ASSERT_EQ(EINA_TRUE,
+ ewk_view_url_set(GetEwkWebView(), GetResourceUrl(kUrl).c_str()));
+ ASSERT_EQ(Success, EventLoopStart());
-TEST_F(utc_blink_ewk_view_scroll_set, POS_TEST1)
-{
- if(!ewk_view_url_set(GetEwkWebView(),GetResourceUrl(resource).c_str()))
- utc_fail();
- if(Success!=EventLoopStart())
- utc_fail();
-
- const int valScrollSet = 2;
- Eina_Bool result = EINA_FALSE;
+ Eina_Bool result = ewk_view_scroll_set(GetEwkWebView(), kScrollX, kScrollY);
+ ASSERT_EQ(EINA_TRUE, result);
+}
- result = ewk_view_scroll_set(GetEwkWebView(), valScrollSet, valScrollSet);
- utc_check_eq(result, EINA_TRUE);
+/**
+ * @brief Check if positive scroll values set works with no context
+ */
+TEST_F(utc_blink_ewk_view_scroll_set, POS_SCROLL_POSITIVE_NO_CONTEXT) {
+ Eina_Bool result = ewk_view_scroll_set(GetEwkWebView(), kScrollX, kScrollY);
+ ASSERT_EQ(EINA_TRUE, result);
}
/**
- * @brief Positive test case of ewk_view_scroll_set(),tseting scroll postion against after set, and scroll
+ * @brief Check if positive scroll values over max scroll positions are not set
*/
+TEST_F(utc_blink_ewk_view_scroll_set, POS_SCROLL_POSITIVE_OVERSCROLL) {
+ ASSERT_EQ(EINA_TRUE,
+ ewk_view_url_set(GetEwkWebView(), GetResourceUrl(kUrl).c_str()));
+ ASSERT_EQ(Success, EventLoopStart());
-TEST_F(utc_blink_ewk_view_scroll_set, POS_TEST2)
-{
- const int valScrollSet = 2;
+ Eina_Bool result = ewk_view_scroll_set(GetEwkWebView(), 9999, 9999);
+ ASSERT_EQ(EINA_TRUE, result);
int x = 0, y = 0;
- Eina_Bool result = EINA_FALSE;
- Eina_Bool getCheck = EINA_FALSE;
- Eina_Bool finalCheck = EINA_FALSE;
-
- int w=0, h=0;
- ewk_view_scroll_size_get(GetEwkWebView(), &w, &h);
-
- result = ewk_view_scroll_set(GetEwkWebView(), valScrollSet, valScrollSet);
-
- if (result == EINA_TRUE) {
- getCheck = ewk_view_scroll_pos_get(GetEwkWebView(), &x, &y);
- utc_check_eq(getCheck, EINA_TRUE);
- } else {
- utc_check_eq(result, EINA_TRUE);
- }
+ result = ewk_view_scroll_pos_get(GetEwkWebView(), &x, &y);
+ ASSERT_EQ(EINA_TRUE, result);
+ EXPECT_LT(0, x);
+ EXPECT_LT(0, y);
}
/**
- * @brief Positive test case of ewk_view_scroll_set(),tseting scroll postion against after set, and scroll
+ * @brief Check if negative scroll values are not set
*/
+TEST_F(utc_blink_ewk_view_scroll_set, POS_SCROLL_NEGATIVE) {
+ ASSERT_EQ(EINA_TRUE,
+ ewk_view_url_set(GetEwkWebView(), GetResourceUrl(kUrl).c_str()));
+ ASSERT_EQ(Success, EventLoopStart());
-TEST_F(utc_blink_ewk_view_scroll_set, POS_TEST3)
-{
+ Eina_Bool result = ewk_view_scroll_set(GetEwkWebView(), -2, -3);
+ ASSERT_EQ(EINA_TRUE, result);
int x = 0, y = 0;
- const int valScrollSet = -12;
-
- ewk_view_scroll_set(GetEwkWebView(), valScrollSet, valScrollSet);
-
- ewk_view_scroll_pos_get(GetEwkWebView(), &x, &y);
-
- Eina_Bool result = EINA_FALSE;
- if (x == 0 && y == 0)
- result = EINA_TRUE;
-
- utc_check_eq(result, EINA_TRUE);
+ result = ewk_view_scroll_pos_get(GetEwkWebView(), &x, &y);
+ ASSERT_EQ(EINA_TRUE, result);
+ EXPECT_EQ(0, x);
+ EXPECT_EQ(0, y);
}
-
/**
- * @brief Negative test case of ewk_view_scroll_set(), testing for null
+ * @brief Check if api returns EINA_FALSE for null webview
*/
-TEST_F(utc_blink_ewk_view_scroll_set, NEG_TEST)
-{
- utc_check_eq(ewk_view_scroll_set(NULL, 1916, 1993), EINA_FALSE);
+TEST_F(utc_blink_ewk_view_scroll_set, NEG_INVALID_WEBVIEW) {
+ ASSERT_EQ(EINA_FALSE, ewk_view_scroll_set(NULL, kScrollX, kScrollY));
}
--- /dev/null
+// Copyright 2016 Samsung Electronics. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "utc_blink_ewk_base.h"
+
+static const char* kURL = "/ewk_view/index_big_red_square.html";
+
+class utc_blink_ewk_view_vertical_panning_hold_get : public utc_blink_ewk_base {
+ protected:
+ void LoadFinished(Evas_Object*) override { EventLoopStop(Success); }
+};
+
+TEST_F(utc_blink_ewk_view_vertical_panning_hold_get, POS_HOLD_DEFAULT) {
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), GetResourceUrl(kURL).c_str()));
+ ASSERT_EQ(Success, EventLoopStart());
+
+ ASSERT_FALSE(ewk_view_vertical_panning_hold_get(GetEwkWebView()));
+}
+
+TEST_F(utc_blink_ewk_view_vertical_panning_hold_get, POS_HOLD_TRUE) {
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), GetResourceUrl(kURL).c_str()));
+ ASSERT_EQ(Success, EventLoopStart());
+
+ ewk_view_vertical_panning_hold_set(GetEwkWebView(), EINA_TRUE);
+ ASSERT_TRUE(ewk_view_vertical_panning_hold_get(GetEwkWebView()));
+}
+
+TEST_F(utc_blink_ewk_view_vertical_panning_hold_get, POS_HOLD_FALSE) {
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), GetResourceUrl(kURL).c_str()));
+ ASSERT_EQ(Success, EventLoopStart());
+
+ ewk_view_vertical_panning_hold_set(GetEwkWebView(), EINA_FALSE);
+ ASSERT_FALSE(ewk_view_vertical_panning_hold_get(GetEwkWebView()));
+}
+
+TEST_F(utc_blink_ewk_view_vertical_panning_hold_get, NEG_INVALID_VIEW) {
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), GetResourceUrl(kURL).c_str()));
+ ASSERT_EQ(Success, EventLoopStart());
+
+ ewk_view_vertical_panning_hold_set(GetEwkWebView(), EINA_TRUE);
+ ASSERT_FALSE(ewk_view_vertical_panning_hold_get(nullptr));
+}
--- /dev/null
+// Copyright 2016 Samsung Electronics. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "utc_blink_ewk_base.h"
+
+static const char* kURL = "/ewk_view/index_big_red_square.html";
+static const int kFirstTouchPosition = 500;
+static const double kTouchEventInterval = 0.012;
+
+class utc_blink_ewk_view_vertical_panning_hold_set : public utc_blink_ewk_base {
+ protected:
+ void LoadFinished(Evas_Object*) override { EventLoopStop(Success); }
+
+ // Move touch point from (500, 500) to (400, 400).
+ void Panning() {
+ Ewk_Touch_Point* touch_point = new Ewk_Touch_Point;
+ touch_point->id = 0;
+ touch_point->x = kFirstTouchPosition;
+ touch_point->y = kFirstTouchPosition;
+ touch_point->state = EVAS_TOUCH_POINT_DOWN;
+
+ Eina_List* list = nullptr;
+ list = eina_list_append(list, touch_point);
+
+ ewk_view_feed_touch_event(GetEwkWebView(), EWK_TOUCH_START, list, nullptr);
+
+ for (int i = 1; i <= 10; ++i) {
+ touch_point->x = kFirstTouchPosition - i * 10;
+ touch_point->y = kFirstTouchPosition - i * 10;
+ touch_point->state = EVAS_TOUCH_POINT_MOVE;
+
+ ewk_view_feed_touch_event(GetEwkWebView(), EWK_TOUCH_MOVE, list, nullptr);
+ EventLoopWait(kTouchEventInterval);
+ }
+
+ eina_list_free(list);
+ delete touch_point;
+ }
+};
+
+TEST_F(utc_blink_ewk_view_vertical_panning_hold_set, POS_HOLD_TRUE) {
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), GetResourceUrl(kURL).c_str()));
+ ASSERT_EQ(Success, EventLoopStart());
+
+ ewk_view_touch_events_enabled_set(GetEwkWebView(), EINA_TRUE);
+ ewk_view_vertical_panning_hold_set(GetEwkWebView(), EINA_TRUE);
+ Panning();
+ EventLoopWait(1.0);
+
+ int x, y;
+ ASSERT_TRUE(ewk_view_scroll_pos_get(GetEwkWebView(), &x, &y));
+ EXPECT_NE(0, x);
+ EXPECT_EQ(0, y);
+}
+
+TEST_F(utc_blink_ewk_view_vertical_panning_hold_set, POS_HOLD_FALSE) {
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), GetResourceUrl(kURL).c_str()));
+ ASSERT_EQ(Success, EventLoopStart());
+
+ ewk_view_touch_events_enabled_set(GetEwkWebView(), EINA_TRUE);
+ ewk_view_vertical_panning_hold_set(GetEwkWebView(), EINA_FALSE);
+ Panning();
+ EventLoopWait(1.0);
+
+ int x, y;
+ ASSERT_TRUE(ewk_view_scroll_pos_get(GetEwkWebView(), &x, &y));
+ EXPECT_NE(0, x);
+ EXPECT_NE(0, y);
+}
+
+TEST_F(utc_blink_ewk_view_vertical_panning_hold_set, NEG_INVALID_VIEW) {
+ ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(), GetResourceUrl(kURL).c_str()));
+ ASSERT_EQ(Success, EventLoopStart());
+
+ ewk_view_touch_events_enabled_set(GetEwkWebView(), EINA_TRUE);
+ ewk_view_vertical_panning_hold_set(nullptr, EINA_TRUE);
+ Panning();
+ EventLoopWait(1.0);
+
+ int x, y;
+ ASSERT_TRUE(ewk_view_scroll_pos_get(GetEwkWebView(), &x, &y));
+ EXPECT_NE(0, x);
+ EXPECT_NE(0, y);
+}