return AllowCookies(url, net::SiteForCookies::FromUrl(first_party), true);
}
+bool CookieManager::IsFileSchemeCookiesAllowed() {
+ auto cookie_monster =
+ static_cast<net::CookieMonster*>(GetCookieStore().get());
+ if (!cookie_monster)
+ return false;
+
+ AutoLock lock(file_scheme_lock_);
+ return cookie_monster->IsCookieableScheme(url::kFileScheme);
+}
+
+void CookieManager::SetAcceptFileSchemeCookies(bool accept) {
+ auto cookie_monster =
+ static_cast<net::CookieMonster*>(GetCookieStore().get());
+ if (!cookie_monster)
+ return;
+
+ std::vector<std::string> schemes(
+ CookieMonster::kDefaultCookieableSchemes,
+ CookieMonster::kDefaultCookieableSchemes +
+ CookieMonster::kDefaultCookieableSchemesCount);
+ if (accept)
+ schemes.push_back(url::kFileScheme);
+
+ AutoLock lock(file_scheme_lock_);
+ cookie_monster->SetCookieableSchemes(schemes, base::DoNothing());
+}
+
static void SignalGetCookieValueCompleted(base::WaitableEvent* completion,
std::string* result,
const std::string& value) {
return weak_ptr_factory_.GetWeakPtr();
}
+ // file scheme
+ bool IsFileSchemeCookiesAllowed();
+ void SetAcceptFileSchemeCookies(bool accept);
+
private:
struct EwkGetHostCallback;
// This only mutates on the UI thread.
std::queue< EwkGetHostCallback* > host_callback_queue_;
base::WeakPtrFactory<CookieManager> weak_ptr_factory_;
+ // file scheme
+ base::Lock file_scheme_lock_;
DISALLOW_COPY_AND_ASSIGN(CookieManager);
};
Eina_Bool ewk_cookie_manager_file_scheme_cookies_allow_get(Ewk_Cookie_Manager* manager)
{
- LOG_EWK_API_MOCKUP();
- return false;
+ EWK_COOKIE_MANAGER_GET_OR_RETURN(manager, cookie_manager, EINA_FALSE);
+ return cookie_manager->IsFileSchemeCookiesAllowed();
}
void ewk_cookie_manager_file_scheme_cookies_allow_set(Ewk_Cookie_Manager* manager, Eina_Bool allow)
{
- LOG_EWK_API_MOCKUP();
+ EWK_COOKIE_MANAGER_GET_OR_RETURN(manager, cookie_manager);
+ cookie_manager->SetAcceptFileSchemeCookies(allow);
}