mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
- Fix a crash caused by CefBrowserHostImpl being deleted before CefCookieStoreProxy (issue #810).
- Add documentation explaining the relationship between network request processing classes. - Remove stale code in url_request_context_getter_proxy.cc. git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@935 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
@@ -3,125 +3,10 @@
|
||||
// be found in the LICENSE file.
|
||||
|
||||
#include "libcef/browser/url_request_context_getter_proxy.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "libcef/browser/browser_host_impl.h"
|
||||
#include "libcef/browser/cookie_manager_impl.h"
|
||||
#include "libcef/browser/thread_util.h"
|
||||
#include "libcef/browser/url_request_context_getter.h"
|
||||
#include "libcef/browser/url_request_context_proxy.h"
|
||||
|
||||
#include "base/logging.h"
|
||||
#include "base/message_loop_proxy.h"
|
||||
#include "net/cookies/cookie_store.h"
|
||||
#include "net/url_request/url_request_context.h"
|
||||
|
||||
namespace {
|
||||
|
||||
class CefCookieStoreProxy : public net::CookieStore {
|
||||
public:
|
||||
explicit CefCookieStoreProxy(CefBrowserHostImpl* browser,
|
||||
net::URLRequestContext* parent)
|
||||
: parent_(parent),
|
||||
browser_(browser) {
|
||||
}
|
||||
|
||||
// net::CookieStore methods.
|
||||
virtual void SetCookieWithOptionsAsync(
|
||||
const GURL& url,
|
||||
const std::string& cookie_line,
|
||||
const net::CookieOptions& options,
|
||||
const SetCookiesCallback& callback) OVERRIDE {
|
||||
scoped_refptr<net::CookieStore> cookie_store = GetCookieStore();
|
||||
cookie_store->SetCookieWithOptionsAsync(url, cookie_line, options,
|
||||
callback);
|
||||
}
|
||||
|
||||
virtual void GetCookiesWithOptionsAsync(
|
||||
const GURL& url, const net::CookieOptions& options,
|
||||
const GetCookiesCallback& callback) OVERRIDE {
|
||||
scoped_refptr<net::CookieStore> cookie_store = GetCookieStore();
|
||||
cookie_store->GetCookiesWithOptionsAsync(url, options, callback);
|
||||
}
|
||||
|
||||
void GetCookiesWithInfoAsync(
|
||||
const GURL& url,
|
||||
const net::CookieOptions& options,
|
||||
const GetCookieInfoCallback& callback) OVERRIDE {
|
||||
scoped_refptr<net::CookieStore> cookie_store = GetCookieStore();
|
||||
cookie_store->GetCookiesWithInfoAsync(url, options, callback);
|
||||
}
|
||||
|
||||
virtual void DeleteCookieAsync(const GURL& url,
|
||||
const std::string& cookie_name,
|
||||
const base::Closure& callback) OVERRIDE {
|
||||
scoped_refptr<net::CookieStore> cookie_store = GetCookieStore();
|
||||
cookie_store->DeleteCookieAsync(url, cookie_name, callback);
|
||||
}
|
||||
|
||||
virtual void DeleteAllCreatedBetweenAsync(const base::Time& delete_begin,
|
||||
const base::Time& delete_end,
|
||||
const DeleteCallback& callback)
|
||||
OVERRIDE {
|
||||
scoped_refptr<net::CookieStore> cookie_store = GetCookieStore();
|
||||
cookie_store->DeleteAllCreatedBetweenAsync(delete_begin, delete_end,
|
||||
callback);
|
||||
}
|
||||
|
||||
virtual void DeleteSessionCookiesAsync(const DeleteCallback& callback)
|
||||
OVERRIDE {
|
||||
scoped_refptr<net::CookieStore> cookie_store = GetCookieStore();
|
||||
cookie_store->DeleteSessionCookiesAsync(callback);
|
||||
}
|
||||
|
||||
virtual net::CookieMonster* GetCookieMonster() OVERRIDE {
|
||||
scoped_refptr<net::CookieStore> cookie_store = GetCookieStore();
|
||||
return cookie_store->GetCookieMonster();
|
||||
}
|
||||
|
||||
private:
|
||||
net::CookieStore* GetCookieStore() {
|
||||
CEF_REQUIRE_IOT();
|
||||
|
||||
scoped_refptr<net::CookieStore> cookie_store;
|
||||
|
||||
CefRefPtr<CefClient> client = browser_->GetClient();
|
||||
if (client.get()) {
|
||||
CefRefPtr<CefRequestHandler> handler = client->GetRequestHandler();
|
||||
if (handler.get()) {
|
||||
// Get the manager from the handler.
|
||||
CefRefPtr<CefCookieManager> manager =
|
||||
handler->GetCookieManager(browser_,
|
||||
browser_->GetLoadingURL().spec());
|
||||
if (manager.get()) {
|
||||
cookie_store =
|
||||
reinterpret_cast<CefCookieManagerImpl*>(
|
||||
manager.get())->cookie_monster();
|
||||
DCHECK(cookie_store);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!cookie_store) {
|
||||
// Use the global cookie store.
|
||||
cookie_store = parent_->cookie_store();
|
||||
}
|
||||
|
||||
DCHECK(cookie_store);
|
||||
return cookie_store;
|
||||
}
|
||||
|
||||
// This pointer is guaranteed by the CefRequestContextProxy object.
|
||||
net::URLRequestContext* parent_;
|
||||
CefBrowserHostImpl* browser_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(CefCookieStoreProxy);
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
|
||||
CefURLRequestContextGetterProxy::CefURLRequestContextGetterProxy(
|
||||
CefBrowserHostImpl* browser,
|
||||
CefURLRequestContextGetter* parent)
|
||||
@@ -133,6 +18,7 @@ CefURLRequestContextGetterProxy::CefURLRequestContextGetterProxy(
|
||||
}
|
||||
|
||||
CefURLRequestContextGetterProxy::~CefURLRequestContextGetterProxy() {
|
||||
CEF_REQUIRE_IOT();
|
||||
if (context_proxy_)
|
||||
parent_->ReleaseURLRequestContextProxy(context_proxy_);
|
||||
}
|
||||
|
Reference in New Issue
Block a user