- Add persistent HTML5 application cache support (issue #543).

- Standardize the approach for creating new directories.

git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@698 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
Marshall Greenblatt 2012-06-20 19:44:00 +00:00
parent 9df142f832
commit 1ed3ac28b4
5 changed files with 33 additions and 31 deletions

View File

@ -146,15 +146,6 @@ void BrowserRequestContext::Init(
const FilePath& cache_path, const FilePath& cache_path,
net::HttpCache::Mode cache_mode, net::HttpCache::Mode cache_mode,
bool no_proxy) { bool no_proxy) {
// Create the |cache_path| directory if necessary.
bool cache_path_valid = false;
if (!cache_path.empty()) {
if (file_util::CreateDirectory(cache_path))
cache_path_valid = true;
else
NOTREACHED() << "The cache_path directory could not be created";
}
SetCookieStoragePath(cache_path); SetCookieStoragePath(cache_path);
storage_.set_server_bound_cert_service(new net::ServerBoundCertService( storage_.set_server_bound_cert_service(new net::ServerBoundCertService(
@ -238,7 +229,7 @@ void BrowserRequestContext::Init(
storage_.set_http_server_properties(new net::HttpServerPropertiesImpl); storage_.set_http_server_properties(new net::HttpServerPropertiesImpl);
net::HttpCache::DefaultBackend* backend = new net::HttpCache::DefaultBackend( net::HttpCache::DefaultBackend* backend = new net::HttpCache::DefaultBackend(
cache_path_valid ? net::DISK_CACHE : net::MEMORY_CACHE, cache_path.empty() ? net::MEMORY_CACHE : net::DISK_CACHE,
cache_path, 0, BrowserResourceLoaderBridge::GetCacheThread()); cache_path, 0, BrowserResourceLoaderBridge::GetCacheThread());
net::HttpCache* cache = net::HttpCache* cache =
@ -299,13 +290,17 @@ void BrowserRequestContext::SetCookieStoragePath(const FilePath& path) {
return; return;
} }
FilePath new_path = path;
scoped_refptr<SQLitePersistentCookieStore> persistent_store; scoped_refptr<SQLitePersistentCookieStore> persistent_store;
if (!path.empty()) { if (!new_path.empty()) {
if (file_util::CreateDirectory(path)) { if (!file_util::PathExists(new_path) &&
const FilePath& cookie_path = path.AppendASCII("Cookies"); !file_util::CreateDirectory(new_path)) {
persistent_store = new SQLitePersistentCookieStore(cookie_path, false); NOTREACHED() << "Failed to create cookie storage directory";
new_path.clear();
} else { } else {
NOTREACHED() << "The cookie storage directory could not be created"; FilePath cookie_path = new_path.Append(FILE_PATH_LITERAL("Cookies"));
persistent_store = new SQLitePersistentCookieStore(cookie_path, false);
} }
} }
@ -314,7 +309,7 @@ void BrowserRequestContext::SetCookieStoragePath(const FilePath& path) {
// longer referenced. // longer referenced.
storage_.set_cookie_store( storage_.set_cookie_store(
new net::CookieMonster(persistent_store.get(), NULL)); new net::CookieMonster(persistent_store.get(), NULL));
cookie_store_path_ = path; cookie_store_path_ = new_path;
} }
const std::string& BrowserRequestContext::GetUserAgent( const std::string& BrowserRequestContext::GetUserAgent(

View File

@ -66,16 +66,17 @@ BrowserWebKitInit::BrowserWebKitInit()
PathService::Get(base::DIR_MODULE, &module_path) && PathService::Get(base::DIR_MODULE, &module_path) &&
media::InitializeMediaLibrary(module_path)); media::InitializeMediaLibrary(module_path));
// Construct and initialize an appcache system for this scope. FilePath appcache_path;
// A new empty temp directory is created to house any cached FilePath cache_path = _Context->cache_path();
// content during the run. Upon exit that directory is deleted. if (!cache_path.empty()) {
// If we can't create a tempdir, we'll use in-memory storage. appcache_path = cache_path.Append(FILE_PATH_LITERAL("AppCache"));
if (!appcache_dir_.CreateUniqueTempDir()) { if (!file_util::PathExists(appcache_path) &&
LOG(WARNING) << "Failed to create a temp dir for the appcache, " !file_util::CreateDirectory(appcache_path)) {
"using in-memory storage."; LOG(WARNING) << "Failed to create appcache storage directory";
DCHECK(appcache_dir_.path().empty()); appcache_path.clear();
}
} }
BrowserAppCacheSystem::InitializeOnUIThread(appcache_dir_.path()); BrowserAppCacheSystem::InitializeOnUIThread(appcache_path);
WebKit::WebDatabase::setObserver(&database_system_); WebKit::WebDatabase::setObserver(&database_system_);

View File

@ -104,7 +104,6 @@ class BrowserWebKitInit : public webkit_glue::WebKitPlatformSupportImpl {
webkit_glue::WebClipboardImpl clipboard_; webkit_glue::WebClipboardImpl clipboard_;
SimpleClipboardClient clipboard_client_; SimpleClipboardClient clipboard_client_;
webkit_glue::WebFileUtilitiesImpl file_utilities_; webkit_glue::WebFileUtilitiesImpl file_utilities_;
ScopedTempDir appcache_dir_;
BrowserAppCacheSystem appcache_system_; BrowserAppCacheSystem appcache_system_;
BrowserDatabaseSystem database_system_; BrowserDatabaseSystem database_system_;
BrowserDomStorageSystem dom_storage_system_; BrowserDomStorageSystem dom_storage_system_;

View File

@ -263,6 +263,12 @@ bool CefContext::Initialize(const CefSettings& settings,
application_ = application; application_ = application;
cache_path_ = FilePath(CefString(&settings.cache_path)); cache_path_ = FilePath(CefString(&settings.cache_path));
if (!cache_path_.empty() &&
!file_util::PathExists(cache_path_) &&
!file_util::CreateDirectory(cache_path_)) {
NOTREACHED() << "Failed to create cache_path directory";
cache_path_.clear();
}
#if defined(OS_MACOSX) || defined(OS_WIN) #if defined(OS_MACOSX) || defined(OS_WIN)
// We want to be sure to init NSPR on the main thread. // We want to be sure to init NSPR on the main thread.

View File

@ -227,12 +227,13 @@ bool CefCookieManagerImpl::SetStoragePath(const CefString& path) {
scoped_refptr<SQLitePersistentCookieStore> persistent_store; scoped_refptr<SQLitePersistentCookieStore> persistent_store;
if (!new_path.empty()) { if (!new_path.empty()) {
if (file_util::CreateDirectory(new_path)) { if (!file_util::PathExists(new_path) &&
const FilePath& cookie_path = new_path.AppendASCII("Cookies"); !file_util::CreateDirectory(new_path)) {
persistent_store = new SQLitePersistentCookieStore(cookie_path, false); NOTREACHED() << "Failed to create cookie storage directory";
new_path.clear();
} else { } else {
NOTREACHED() << "The cookie storage directory could not be created"; FilePath cookie_path = new_path.Append(FILE_PATH_LITERAL("Cookies"));
storage_path_.clear(); persistent_store = new SQLitePersistentCookieStore(cookie_path, false);
} }
} }