EwkView::EwkView(Evas_Object* evasObject, PassRefPtr<EwkContext> context, WKPageGroupRef pageGroup, ViewBehavior behavior) : m_evasObject(evasObject) , m_context(context) , m_pendingSurfaceResize(false) , m_pageClient(behavior == DefaultBehavior ? PageClientDefaultImpl::create(this) : PageClientLegacyImpl::create(this)) , m_webView(adoptRef(new WebView(toImpl(m_context->wkContext()), m_pageClient.get(), toImpl(pageGroup), evasObject))) , m_pageLoadClient(PageLoadClientEfl::create(this)) , m_pagePolicyClient(PagePolicyClientEfl::create(this)) , m_pageUIClient(PageUIClientEfl::create(this)) , m_contextMenuClient(ContextMenuClientEfl::create(this)) , m_findClient(FindClientEfl::create(this)) , m_formClient(FormClientEfl::create(this)) #if ENABLE(VIBRATION) , m_vibrationClient(VibrationClientEfl::create(this)) #endif , m_backForwardList(EwkBackForwardList::create(WKPageGetBackForwardList(wkPage()))) , m_pageScaleFactor(1) , m_settings(EwkSettings::create(this)) , m_cursorIdentifier(0) , m_mouseEventsEnabled(false) #if ENABLE(TOUCH_EVENTS) , m_touchEventsEnabled(false) #endif , m_displayTimer(this, &EwkView::displayTimerFired) , m_inputMethodContext(InputMethodContextEfl::create(this, smartData()->base.evas)) , m_isHardwareAccelerated(true) { ASSERT(m_evasObject); ASSERT(m_context); WKViewInitialize(wkView()); WKPageSetUseFixedLayout(wkPage(), behavior == DefaultBehavior); WKPageGroupRef wkPageGroup = WKPageGetPageGroup(wkPage()); WKPreferencesRef wkPreferences = WKPageGroupGetPreferences(wkPageGroup); WKPreferencesSetWebGLEnabled(wkPreferences, true); WKPreferencesSetFullScreenEnabled(wkPreferences, true); WKPreferencesSetWebAudioEnabled(wkPreferences, true); WKPreferencesSetOfflineWebApplicationCacheEnabled(wkPreferences, true); // Enable mouse events by default setMouseEventsEnabled(true); // Listen for favicon changes. EwkFaviconDatabase* iconDatabase = m_context->faviconDatabase(); ASSERT(iconDatabase); iconDatabase->watchChanges(IconChangeCallbackData(EwkView::handleFaviconChanged, this)); }
EwkView::EwkView(WKViewRef view, Evas_Object* evasObject) : m_webView(view) , m_evasObject(evasObject) , m_context(EwkContext::findOrCreateWrapper(WKPageGetContext(wkPage()))) , m_pageGroup(EwkPageGroup::findOrCreateWrapper(WKPageGetPageGroup(wkPage()))) , m_pageLoadClient(std::make_unique<PageLoadClientEfl>(this)) , m_pagePolicyClient(std::make_unique<PagePolicyClientEfl>(this)) , m_pageUIClient(std::make_unique<PageUIClientEfl>(this)) , m_contextMenuClient(std::make_unique<ContextMenuClientEfl>(this)) , m_findClient(std::make_unique<FindClientEfl>(this)) , m_formClient(std::make_unique<FormClientEfl>(this)) , m_viewClient(std::make_unique<ViewClientEfl>(this)) #if ENABLE(VIBRATION) , m_vibrationClient(std::make_unique<VibrationClientEfl>(this)) #endif , m_backForwardList(std::make_unique<EwkBackForwardList>(WKPageGetBackForwardList(wkPage()))) , m_settings(std::make_unique<EwkSettings>(this)) , m_cursorIdentifier(0) , m_userAgent(WKEinaSharedString(AdoptWK, WKPageCopyUserAgent(wkPage()))) , m_mouseEventsEnabled(false) #if ENABLE(TOUCH_EVENTS) , m_touchEventsEnabled(false) , m_gestureRecognizer(std::make_unique<GestureRecognizer>(this)) #endif , m_displayTimer(this, &EwkView::displayTimerFired) , m_inputMethodContext(InputMethodContextEfl::create(this, smartData()->base.evas)) #if USE(ACCELERATED_COMPOSITING) , m_pageViewportControllerClient(this) , m_pageViewportController(page(), &m_pageViewportControllerClient) #endif , m_isAccelerated(true) { ASSERT(m_evasObject); ASSERT(m_context); // FIXME: Remove when possible. static_cast<WebViewEfl*>(webView())->setEwkView(this); #if USE(ACCELERATED_COMPOSITING) m_evasGL = adoptPtr(evas_gl_new(evas_object_evas_get(m_evasObject))); if (m_evasGL) m_evasGLContext = EvasGLContext::create(m_evasGL.get()); if (!m_evasGLContext) { WARN("Failed to create Evas_GL, falling back to software mode."); m_isAccelerated = false; } m_pendingSurfaceResize = m_isAccelerated; #endif WKViewInitialize(wkView()); WKPageGroupRef wkPageGroup = WKPageGetPageGroup(wkPage()); WKPreferencesRef wkPreferences = WKPageGroupGetPreferences(wkPageGroup); #if USE(ACCELERATED_COMPOSITING) WKPreferencesSetWebGLEnabled(wkPreferences, true); #endif WKPreferencesSetFullScreenEnabled(wkPreferences, true); WKPreferencesSetWebAudioEnabled(wkPreferences, true); WKPreferencesSetOfflineWebApplicationCacheEnabled(wkPreferences, true); #if ENABLE(SPELLCHECK) WKPreferencesSetAsynchronousSpellCheckingEnabled(wkPreferences, true); #endif WKPreferencesSetInteractiveFormValidationEnabled(wkPreferences, true); // Enable mouse events by default setMouseEventsEnabled(true); // Listen for favicon changes. EwkFaviconDatabase* iconDatabase = m_context->faviconDatabase(); ASSERT(iconDatabase); iconDatabase->watchChanges(IconChangeCallbackData(EwkView::handleFaviconChanged, this)); WKPageToEvasObjectMap::AddResult result = wkPageToEvasObjectMap().add(wkPage(), m_evasObject); ASSERT_UNUSED(result, result.isNewEntry); }