, mWebRequestInterceptedCallback(nullptr)
, mEwkContext(context)
{
- EventThreadCallback* callback = new Dali::EventThreadCallback(Dali::MakeCallback(this, &TizenWebEngineContext::OnRequestInterceptedEventCallback));
- mRequestInterceptorEventTrigger = std::unique_ptr<Dali::EventThreadCallback>(callback);
}
TizenWebEngineContext::~TizenWebEngineContext()
{
list = eina_list_append(list, (*it).c_str());
}
-
ewk_context_register_url_schemes_as_cors_enabled(mEwkContext, list);
}
{
list = eina_list_append(list, (*it).c_str());
}
-
ewk_context_register_jsplugin_mime_types(mEwkContext, list);
}
{
eList = eina_list_append(eList, (*it).c_str());
}
-
ewk_context_form_password_data_list_free(mEwkContext, eList);
}
void TizenWebEngineContext::RequestIntercepted(Dali::WebEngineRequestInterceptorPtr interceptor)
{
+ if (mWebRequestInterceptedCallback)
{
- Mutex::ScopedLock lock(mMutex);
- mRequestInterceptorQueue.push(interceptor);
- // Trigger an event on main thread.
- mRequestInterceptorEventTrigger->Trigger();
+ mWebRequestInterceptedCallback(interceptor);
}
-
- // Wait for tasks from main thread and execute tasks.
- TizenWebEngineRequestInterceptor* requestInterceptor = static_cast<TizenWebEngineRequestInterceptor*>(interceptor.Get());
- requestInterceptor->WaitAndRunTasks();
-}
-
-void TizenWebEngineContext::OnRequestInterceptedEventCallback()
-{
- Dali::WebEngineRequestInterceptorPtr interceptor;
- {
- Mutex::ScopedLock lock(mMutex);
- interceptor = mRequestInterceptorQueue.front();
- mRequestInterceptorQueue.pop();
- }
-
- // Execuate callback.
- mWebRequestInterceptedCallback(interceptor);
-
- // Notify io thread that tasks are ready on main thread.
- TizenWebEngineRequestInterceptor* requestInterceptor = static_cast<TizenWebEngineRequestInterceptor*>(interceptor.Get());
- requestInterceptor->NotifyTaskReady();
}
void TizenWebEngineContext::OnRequestIntercepted(Ewk_Context*, Ewk_Intercept_Request* request, void* userData)
void RequestIntercepted(Dali::WebEngineRequestInterceptorPtr interceptor);
/**
- * @brief Event callback for request interceptor is called on main thread.
- */
- void OnRequestInterceptedEventCallback();
-
- /**
* @brief Callback for intercepting http request.
*
* @param[in] context context of web engine
WebEngineDownloadStartedCallback mWebDownloadStartedCallback;
WebEngineMimeOverriddenCallback mWebMimeOverriddenCallback;
WebEngineRequestInterceptedCallback mWebRequestInterceptedCallback;
-
- Ewk_Context* mEwkContext;
- Dali::Mutex mMutex;
- std::unique_ptr<Dali::EventThreadCallback> mRequestInterceptorEventTrigger;
- std::queue<WebEngineRequestInterceptorPtr> mRequestInterceptorQueue;
+ Ewk_Context* mEwkContext;
};
} // namespace Plugin
{
eina_hash_foreach(hash, &TizenWebEngineRequestInterceptor::IterateRequestHeaders, this);
}
-
- mIsThreadWaiting = true;
}
TizenWebEngineRequestInterceptor::~TizenWebEngineRequestInterceptor()
bool TizenWebEngineRequestInterceptor::Ignore()
{
- std::unique_lock<std::mutex> lock(mMutex);
- mTaskQueue.push_back(std::bind(&TizenWebEngineRequestInterceptor::IgnoreIo, this));
- return true;
-}
-
-bool TizenWebEngineRequestInterceptor::IgnoreIo()
-{
return ewk_intercept_request_ignore(ewkRequestInterceptor);
}
return ewk_intercept_request_response_write_chunk(ewkRequestInterceptor, (const char*)chunk, length);
}
-void TizenWebEngineRequestInterceptor::WaitAndRunTasks()
-{
- // wait for tasks from main thread.
- std::unique_lock<std::mutex> lock(mMutex);
- while(mIsThreadWaiting)
- {
- mCondition.wait(lock);
- }
- mIsThreadWaiting = true;
-
- // execute tasks on io thread.
- for(std::vector<TaskCallback>::iterator iter = mTaskQueue.begin(); iter != mTaskQueue.end(); iter++)
- {
- (*iter)();
- }
- mTaskQueue.clear();
-}
-
-void TizenWebEngineRequestInterceptor::NotifyTaskReady()
-{
- std::unique_lock<std::mutex> lock(mMutex);
- mIsThreadWaiting = false;
-
- // wake up the io thread
- mCondition.notify_all();
-}
-
Eina_Bool TizenWebEngineRequestInterceptor::IterateRequestHeaders(const Eina_Hash*, const void* key, void* data, void* fdata)
{
TizenWebEngineRequestInterceptor* pThis = static_cast<TizenWebEngineRequestInterceptor*>(fdata);
*/
bool WriteResponseChunk(const int8_t* chunk, uint32_t length) override;
- /**
- * @brief Wait for and run tasks on io-thread.
- */
- void WaitAndRunTasks();
-
- /**
- * @brief Notify task ready on main thread.
- */
- void NotifyTaskReady();
-
private:
/**
- * @brief Task callback.
- */
- using TaskCallback = std::function<bool(void)>;
-
- /**
- * @copydoc Dali::WebEngineRequestInterceptor::Ignore()
- * @note It is run on IO thread
- */
- bool IgnoreIo();
-
- /**
* @brief Iterator attributes.
*
* @param[in] hash Hash map that need be iterated
std::string requestUrl;
std::string requestMethod;
Dali::Property::Map requestHeaders;
-
- bool mIsThreadWaiting;
- std::vector<TaskCallback> mTaskQueue;
- std::mutex mMutex;
- std::condition_variable mCondition;
};
} // namespace Plugin