// being created occurs).
virtual void DidCreateNewDocument() {}
virtual void DidCreateDocumentElement() {}
+#if BUILDFLAG(IS_EFL)
+ virtual void PlayLinkEffect() {}
+#endif
// TODO(dgozman): replace next two methods with DidFinishNavigation.
// DidCommitProvisionalLoad is only called for new-document navigations.
// Use DidFinishSameDocumentNavigation for same-document navigations.
UpdateEncoding(frame_, frame_->View()->PageEncoding().Utf8());
}
+#if BUILDFLAG(IS_EFL)
+void RenderFrameImpl::PlayLinkEffect() {
+ for (auto& observer : observers_)
+ observer.PlayLinkEffect();
+}
+#endif
+
void RenderFrameImpl::RunScriptsAtDocumentReady() {
DCHECK(initialized_);
GetContentClient()->renderer()->RunScriptsAtDocumentEnd(this);
blink::WebDocumentLoader* document_loader) override;
void DidClearWindowObject() override;
void DidCreateDocumentElement() override;
+#if BUILDFLAG(IS_EFL)
+ void PlayLinkEffect() override;
+#endif
void RunScriptsAtDocumentElementAvailable() override;
void DidReceiveTitle(const blink::WebString& title) override;
void DidDispatchDOMContentLoadedEvent() override;
#if BUILDFLAG(IS_EFL)
float font_scale_factor;
+ bool link_effect_enabled = false;
#endif
bool double_tap_to_zoom_enabled;
return r.text_autosizing_enabled;
}
+#if BUILDFLAG(IS_EFL)
+ static bool link_effect_enabled(const blink::web_pref::WebPreferences& r) {
+ return r.link_effect_enabled;
+ }
+#endif
+
static const GURL& web_app_scope(const ::blink::web_pref::WebPreferences& r) {
return r.web_app_scope;
}
bool text_autosizing_enabled;
+ [EnableIf=is_efl]
+ bool link_effect_enabled;
+
// Representation of the Web App Manifest scope if any.
url.mojom.Url web_app_scope;
// This method may not invalidate the frame, nor execute JavaScript code.
virtual void DidCreateDocumentElement() {}
+#if BUILDFLAG(IS_EFL)
+ virtual void PlayLinkEffect() {}
+#endif
+
// Like |didCreateDocumentElement|, except this method may run JavaScript
// code (and possibly invalidate the frame).
virtual void RunScriptsAtDocumentElementAvailable() {}
virtual bool TizenCompatibilityModeEnabled() const = 0;
#endif
+#if BUILDFLAG(IS_EFL)
+ virtual void SetLinkEffectEnabled(bool) = 0;
+ virtual bool LinkEffectEnabled() const = 0;
+#endif
+
protected:
~WebSettings() = default;
};
}
#if BUILDFLAG(IS_EFL)
+void WebSettingsImpl::SetLinkEffectEnabled(bool link_effect_enabled) {
+ settings_->SetLinkEffectEnabled(link_effect_enabled);
+}
+
void WebSettingsImpl::SetTizenVersion(unsigned major,
unsigned minor,
unsigned release) {
settings_->SetTizenVersion(major, minor, release);
}
+bool WebSettingsImpl::LinkEffectEnabled() const {
+ return settings_->GetLinkEffectEnabled();
+}
+
bool WebSettingsImpl::TizenCompatibilityModeEnabled() const {
return settings_->TizenCompatibilityModeEnabled();
}
#if BUILDFLAG(IS_EFL)
void SetTizenVersion(unsigned, unsigned, unsigned) override;
+ void SetLinkEffectEnabled(bool) override;
+ bool LinkEffectEnabled() const override;
bool TizenCompatibilityModeEnabled() const override;
#endif
#include "third_party/blink/renderer/core/dom/static_node_list.h"
#endif
+#if BUILDFLAG(IS_TIZEN)
+#include "tizen/system_info.h"
+#endif
+
// Get rid of WTF's pow define so we can use std::pow.
#undef pow
#include <cmath> // for std::pow
prefs.tizen_version_release);
#endif
+#if BUILDFLAG(IS_TIZEN)
+ if (IsMobileProfile())
+ settings->SetLinkEffectEnabled(true);
+#endif
+
#if BUILDFLAG(IS_ANDROID)
settings->SetAllowCustomScrollbarInMainFrame(false);
settings->SetAccessibilityFontScaleFactor(prefs.font_scale_factor);
},
{
+ name: "linkEffectEnabled",
+ initial: false,
+ },
+
+ {
name: "presentationRequiresUserGesture",
initial: true,
},
switch (scaled_event.GetType()) {
case WebInputEvent::Type::kGestureTap: {
+#if BUILDFLAG(IS_EFL)
+ if (web_view->SettingsImpl()->LinkEffectEnabled()) {
+ HitTestResult result = targeted_event.GetHitTestResult();
+ result.SetToShadowHostIfInRestrictedShadowRoot();
+ if (result.CanPlayLinkEffect())
+ FocusedWebLocalFrameInWidget()->Client()->PlayLinkEffect();
+ }
+#endif
{
ContextMenuAllowedScope scope;
event_result =
StripLeadingAndTrailingHTMLSpaces(url_string));
}
+#if BUILDFLAG(IS_EFL)
+bool HitTestResult::CanPlayLinkEffect() const {
+ for (Node* node = inner_node_.Get(); node; node = node->parentNode()) {
+ auto* html_element = DynamicTo<HTMLElement>(node);
+
+ if (IsRichlyEditable(*node))
+ return false;
+
+ if (node->IsElementNode() && html_element &&
+ html_element->IsFormControlElement() &&
+ html_element->IsDisabledFormControl()) {
+ return false;
+ }
+
+ if (node->GetLayoutObject() && node->GetLayoutObject()->IsDocumentElement())
+ return false;
+
+ if (node->HasTagName(html_names::kBodyTag))
+ continue;
+
+ if ((node->HasTagName(html_names::kATag) &&
+ html_element->hasAttribute(html_names::kHrefAttr)) ||
+ (node->HasTagName(html_names::kAreaTag) &&
+ html_element->hasAttribute(html_names::kHrefAttr)) ||
+ (node->HasTagName(html_names::kSummaryTag) &&
+ html_element->SupportsFocus()) ||
+ node->HasTagName(html_names::kButtonTag) ||
+ node->HasTagName(html_names::kInputTag) ||
+ node->HasTagName(html_names::kSelectTag) ||
+ node->HasEventListeners(event_type_names::kClick) ||
+ node->HasEventListeners(event_type_names::kMousedown) ||
+ node->HasEventListeners(event_type_names::kMouseup) ||
+ node->HasEventListeners(event_type_names::kMouseover)) {
+ return true;
+ }
+ }
+
+ return false;
+}
+#endif
+
KURL HitTestResult::AbsoluteImageURL() const {
return AbsoluteImageURL(InnerNodeOrImageMapImage());
}
const cc::Region&);
void Append(const HitTestResult&);
+#if BUILDFLAG(IS_EFL)
+ bool CanPlayLinkEffect() const;
+#endif
bool HasListBasedResult() const {
return GetHitTestRequest().ListBased() && InnerNode();
#include "browser/web_view_browser_message_filter.h"
#include "base/cxx17_backports.h"
-#include "browser/sound_effect.h"
#include "common/hit_test_params.h"
#include "common/render_messages_ewk.h"
#include "common/web_contents_utils.h"
if (!web_view_)
return;
- if (is_link && web_view_->GetSettings()->getLinkEffectEnabled())
- sound_effect::playLinkEffect();
web_view_->HandleTapGestureForSelection(is_content_editable);
}
IPC_STRUCT_TRAITS_BEGIN(WebPreferencesEfl)
IPC_STRUCT_TRAITS_MEMBER(shrinks_viewport_content_to_fit)
IPC_STRUCT_TRAITS_MEMBER(javascript_can_open_windows_automatically_ewk)
+ IPC_STRUCT_TRAITS_MEMBER(link_effect_enabled)
IPC_STRUCT_TRAITS_END()
IPC_STRUCT_TRAITS_BEGIN(Hit_Test_Params::Node_Data)
bool /* is_link */,
bool /* is_editable_content */)
+IPC_MESSAGE_ROUTED0(EwkHostMsg_PlayLinkEffect)
+
IPC_MESSAGE_ROUTED2(EwkHostMsg_PlainTextGetContents,
std::string, /* contentText */
int /* callback id */)
bool shrinks_viewport_content_to_fit =
IsMobileProfile() || IsWearableProfile() ? true : false;
bool javascript_can_open_windows_automatically_ewk = true;
+ bool link_effect_enabled = true;
};
#endif // WEB_PREFERENCES_EFL_H
m_zoomEnabled(true),
m_openPanelEnabled(true),
m_allowRestrictedURL(true),
- m_URLBarHide(false),
- m_linkEffectEnabled(true) {}
+ m_URLBarHide(false) {}
const char* defaultTextEncoding() const {
return m_preferences.default_encoding.c_str();
bool getAllowRestrictedURLEnabled() const { return m_allowRestrictedURL; }
void setURLBarHideEnabled(bool enable) { m_URLBarHide = enable; }
bool getURLBarHideEnabled() const { return m_URLBarHide; }
- void setLinkEffectEnabled(bool enable) { m_linkEffectEnabled = enable; }
- bool getLinkEffectEnabled() const { return m_linkEffectEnabled; }
private:
WebPreferences m_preferences;
bool m_openPanelEnabled;
bool m_allowRestrictedURL;
bool m_URLBarHide;
- bool m_linkEffectEnabled;
};
#endif // ewk_settings_private_h
return webview->GetLinkMagnifierEnabled();
}
-Eina_Bool ewk_settings_link_effect_enabled_set(Ewk_Settings* settings, Eina_Bool linkEffectEnabled)
-{
+Eina_Bool ewk_settings_link_effect_enabled_set(Ewk_Settings* settings,
+ Eina_Bool enable) {
EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
- settings->setLinkEffectEnabled(linkEffectEnabled);
+ settings->getPreferencesEfl().link_effect_enabled = enable;
+ ewkUpdateWebkitPreferences(settings->getEvasObject());
return true;
}
Eina_Bool ewk_settings_link_effect_enabled_get(const Ewk_Settings* settings)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
- return settings->getLinkEffectEnabled();
+ return settings->getPreferencesEfl().link_effect_enabled;
}
Eina_Bool ewk_settings_uses_encoding_detector_set(Ewk_Settings* settings, Eina_Bool use)
Send(new EwkHostMsg_DidCreateDocumentElement(render_frame()->GetRoutingID()));
}
+void RenderFrameObserverEfl::PlayLinkEffect() {
+ Send(new EwkHostMsg_PlayLinkEffect(render_frame()->GetRoutingID()));
+}
+
void RenderFrameObserverEfl::DidCreateScriptContext(
v8::Local<v8::Context> context,
int world_id) {
void WillReleaseScriptContext(v8::Handle<v8::Context> context,
int world_id) override;
void DidCreateDocumentElement() override;
+ void PlayLinkEffect() override;
private:
void OnSelectPopupMenuItems(bool canceled,
#include "base/task/bind_post_task.h"
#include "browser/favicon/favicon_database.h"
#include "browser/favicon/favicon_downloader.h"
+#include "browser/sound_effect.h"
#include "browser_context_efl.h"
#include "common/print_pages_params.h"
#include "common/render_messages_ewk.h"
IPC_MESSAGE_HANDLER(EwkHostMsg_DidNotAllowScript, OnDidNotAllowScript)
IPC_MESSAGE_HANDLER(EwkHostMsg_DidCreateDocumentElement,
OnDidCreateDocumentElement)
+ IPC_MESSAGE_HANDLER(EwkHostMsg_PlayLinkEffect, OnPlayLinkEffect)
IPC_MESSAGE_HANDLER(EwkHostMsg_DidPrintPagesToPdf,
OnPrintedMetafileReceived)
IPC_MESSAGE_HANDLER(EwkHostMsg_WrtMessage, OnWrtPluginMessage)
SetContentSecurityPolicy(pending_content_security_policy_->policy, type);
}
+void WebContentsObserverEfl::OnPlayLinkEffect() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ sound_effect::playLinkEffect();
+}
+
void WebContentsObserverEfl::OnPrintedMetafileReceived(
const DidPrintPagesParams& params) {
#if !defined(EWK_BRINGUP) // FIXME: m85 bringup
void OnDidChangeScrollOffset(int scroll_x, int scroll_y);
void OnFormSubmit(const GURL& url);
void OnDidNotAllowScript();
+ void OnPlayLinkEffect();
void OnWrtPluginMessage(const Ewk_Wrt_Message_Data& data);
void OnWrtPluginSyncMessage(const Ewk_Wrt_Message_Data& data,
IPC::Message* reply);