Update to Chromium revision 62731.

- Introduce BrowserFileWriter implementation.
- ResourceLoaderBridge::ResponseInfo renamed to ResourceResponseInfo.
- StatsTable and SplitString moved to "base" namespace.

Don't use the system proxy resolver on Windows when "Automatically detect settings" is checked under LAN Settings (issue #81).

git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@116 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
Marshall Greenblatt 2010-10-15 18:37:25 +00:00
parent 383168173a
commit 6db1d580cd
18 changed files with 355 additions and 55 deletions

View File

@ -54,3 +54,4 @@ Date | CEF Revision | Chromium Revision
2010-08-09 | /trunk@93 | /trunk@55388
2010-09-12 | /trunk@102 | /trunk@59193
2010-10-03 | /trunk@108 | /trunk@61327
2010-10-15 | /trunk@116 | /trunk@62731

View File

@ -368,6 +368,8 @@
'libcef/browser_database_system.h',
'libcef/browser_file_system.cc',
'libcef/browser_file_system.h',
'libcef/browser_file_writer.cc',
'libcef/browser_file_writer.h',
'libcef/browser_impl.cc',
'libcef/browser_impl.h',
'libcef/browser_impl_win.cc',

View File

@ -3,6 +3,7 @@
// found in the LICENSE file.
#include "browser_file_system.h"
#include "browser_file_writer.h"
#include "base/file_path.h"
#include "base/message_loop_proxy.h"
@ -16,6 +17,8 @@
using WebKit::WebFileInfo;
using WebKit::WebFileSystemCallbacks;
using WebKit::WebFileSystemEntry;
using WebKit::WebFileWriter;
using WebKit::WebFileWriterClient;
using WebKit::WebString;
using WebKit::WebVector;
@ -41,10 +44,10 @@ WebKit::WebFileError PlatformFileErrorToWebFileError(
}
}
class TestShellFileSystemCallbackDispatcher
class BrowserFileSystemCallbackDispatcher
: public fileapi::FileSystemCallbackDispatcher {
public:
TestShellFileSystemCallbackDispatcher(
BrowserFileSystemCallbackDispatcher(
BrowserFileSystem* file_system,
WebFileSystemCallbacks* callbacks)
: file_system_(file_system),
@ -61,7 +64,10 @@ class TestShellFileSystemCallbackDispatcher
virtual void DidReadMetadata(const base::PlatformFileInfo& info) {
WebFileInfo web_file_info;
web_file_info.length = info.size;
web_file_info.modificationTime = info.last_modified.ToDoubleT();
web_file_info.type = info.is_directory ?
WebFileInfo::TypeDirectory : WebFileInfo::TypeFile;
callbacks_->didReadMetadata(web_file_info);
file_system_->RemoveCompletedOperation(request_id_);
}
@ -92,7 +98,7 @@ class TestShellFileSystemCallbackDispatcher
file_system_->RemoveCompletedOperation(request_id_);
}
virtual void DidWrite(int64, bool, fileapi::FileSystemOperation*) {
virtual void DidWrite(int64, bool) {
NOTREACHED();
}
@ -133,7 +139,14 @@ void BrowserFileSystem::remove(
const WebString& path, WebFileSystemCallbacks* callbacks) {
FilePath filepath(webkit_glue::WebStringToFilePath(path));
GetNewOperation(callbacks)->Remove(filepath);
GetNewOperation(callbacks)->Remove(filepath, false /* recursive */);
}
void BrowserFileSystem::removeRecursively(
const WebString& path, WebFileSystemCallbacks* callbacks) {
FilePath filepath(webkit_glue::WebStringToFilePath(path));
GetNewOperation(callbacks)->Remove(filepath, true /* recursive */);
}
void BrowserFileSystem::readMetadata(
@ -158,7 +171,7 @@ void BrowserFileSystem::createDirectory(
}
void BrowserFileSystem::fileExists(
const WebString& path, WebFileSystemCallbacks* callbacks) {
const WebString& path, WebFileSystemCallbacks* callbacks) {
FilePath filepath(webkit_glue::WebStringToFilePath(path));
GetNewOperation(callbacks)->FileExists(filepath);
@ -178,11 +191,16 @@ void BrowserFileSystem::readDirectory(
GetNewOperation(callbacks)->ReadDirectory(filepath);
}
WebFileWriter* BrowserFileSystem::createFileWriter(
const WebString& path, WebFileWriterClient* client) {
return new BrowserFileWriter(path, client);
}
fileapi::FileSystemOperation* BrowserFileSystem::GetNewOperation(
WebFileSystemCallbacks* callbacks) {
// This pointer will be owned by |operation|.
TestShellFileSystemCallbackDispatcher* dispatcher =
new TestShellFileSystemCallbackDispatcher(this, callbacks);
BrowserFileSystemCallbackDispatcher* dispatcher =
new BrowserFileSystemCallbackDispatcher(this, callbacks);
fileapi::FileSystemOperation* operation = new fileapi::FileSystemOperation(
dispatcher, base::MessageLoopProxy::CreateForCurrentThread());
int32 request_id = operations_.Add(operation);

View File

@ -1,6 +1,6 @@
// Copyright (c) 2010 The Chromium Authors. All rights reserved. Use of this
// source code is governed by a BSD-style license that can be found in the
// LICENSE file.
// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef BROWSER_FILE_SYSTEM_H_
#define BROWSER_FILE_SYSTEM_H_
@ -28,6 +28,8 @@ class BrowserFileSystem : public WebKit::WebFileSystem {
WebKit::WebFileSystemCallbacks* callbacks);
virtual void remove(const WebKit::WebString& path,
WebKit::WebFileSystemCallbacks* callbacks);
virtual void removeRecursively(const WebKit::WebString& path,
WebKit::WebFileSystemCallbacks* callbacks);
virtual void readMetadata(const WebKit::WebString& path,
WebKit::WebFileSystemCallbacks* callbacks);
virtual void createFile(const WebKit::WebString& path,
@ -42,6 +44,8 @@ class BrowserFileSystem : public WebKit::WebFileSystem {
WebKit::WebFileSystemCallbacks* callbacks);
virtual void readDirectory(const WebKit::WebString& path,
WebKit::WebFileSystemCallbacks* callbacks);
virtual WebKit::WebFileWriter* createFileWriter(
const WebKit::WebString& path, WebKit::WebFileWriterClient* client);
private:
// Helpers.

View File

@ -0,0 +1,184 @@
// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "browser_file_writer.h"
#include "cef_thread.h"
#include "base/logging.h"
#include "base/message_loop_proxy.h"
#include "net/url_request/url_request_context.h"
#include "webkit/fileapi/file_system_callback_dispatcher.h"
#include "webkit/fileapi/file_system_operation.h"
#include "webkit/glue/webkit_glue.h"
using fileapi::FileSystemOperation;
using fileapi::FileSystemCallbackDispatcher;
using fileapi::WebFileWriterBase;
using WebKit::WebFileWriterClient;
using WebKit::WebString;
using WebKit::WebURL;
URLRequestContext* BrowserFileWriter::request_context_ = NULL;
// Helper class to proxy the write and truncate calls to the IO thread,
// and to proxy the results back to the main thead. There is a one-to-one
// relationship between BrowserFileWriters and IOThreadBackends.
class BrowserFileWriter::IOThreadProxy
: public base::RefCountedThreadSafe<BrowserFileWriter::IOThreadProxy> {
public:
explicit IOThreadProxy(const base::WeakPtr<BrowserFileWriter>& simple_writer)
: simple_writer_(simple_writer) {
io_thread_ = CefThread::GetMessageLoopProxyForThread(CefThread::IO);
main_thread_ = base::MessageLoopProxy::CreateForCurrentThread();
}
virtual ~IOThreadProxy() {
}
void Truncate(const FilePath& path, int64 offset) {
if (!io_thread_->BelongsToCurrentThread()) {
io_thread_->PostTask(FROM_HERE, NewRunnableMethod(
this, &IOThreadProxy::Truncate, path, offset));
return;
}
DCHECK(!operation_.get());
operation_.reset(GetNewOperation());
operation_->Truncate(path, offset);
}
void Write(const FilePath& path, const GURL& blob_url, int64 offset) {
if (!io_thread_->BelongsToCurrentThread()) {
io_thread_->PostTask(FROM_HERE, NewRunnableMethod(
this, &IOThreadProxy::Write, path, blob_url, offset));
return;
}
DCHECK(request_context_);
DCHECK(!operation_.get());
operation_.reset(GetNewOperation());
operation_->Write(request_context_, path, blob_url, offset);
}
void Cancel() {
if (!io_thread_->BelongsToCurrentThread()) {
io_thread_->PostTask(FROM_HERE, NewRunnableMethod(
this, &IOThreadProxy::Cancel));
return;
}
if (!operation_.get()) {
DidFail(base::PLATFORM_FILE_ERROR_INVALID_OPERATION);
return;
}
cancel_operation_.reset(GetNewOperation());
operation_->Cancel(cancel_operation_.get());
}
private:
// Inner class to receive callbacks from FileSystemOperation.
class CallbackDispatcher : public FileSystemCallbackDispatcher {
public:
explicit CallbackDispatcher(IOThreadProxy* proxy) : proxy_(proxy) {
}
virtual void DidSucceed() {
proxy_->DidSucceed();
}
virtual void DidFail(base::PlatformFileError error_code) {
proxy_->DidFail(error_code);
}
virtual void DidWrite(int64 bytes, bool complete) {
proxy_->DidWrite(bytes, complete);
}
virtual void DidReadMetadata(const base::PlatformFileInfo&) {
NOTREACHED();
}
virtual void DidReadDirectory(
const std::vector<base::file_util_proxy::Entry>& entries,
bool has_more) {
NOTREACHED();
}
virtual void DidOpenFileSystem(const std::string& name,
const FilePath& root_path) {
NOTREACHED();
}
scoped_refptr<IOThreadProxy> proxy_;
};
FileSystemOperation* GetNewOperation() {
// The FileSystemOperation takes ownership of the CallbackDispatcher.
return new FileSystemOperation(new CallbackDispatcher(this), io_thread_);
}
void DidSucceed() {
if (!main_thread_->BelongsToCurrentThread()) {
operation_.reset();
main_thread_->PostTask(FROM_HERE, NewRunnableMethod(
this, &IOThreadProxy::DidSucceed));
return;
}
if (simple_writer_)
simple_writer_->DidSucceed();
}
void DidFail(base::PlatformFileError error_code) {
if (!main_thread_->BelongsToCurrentThread()) {
operation_.reset();
main_thread_->PostTask(FROM_HERE, NewRunnableMethod(
this, &IOThreadProxy::DidFail, error_code));
return;
}
if (simple_writer_)
simple_writer_->DidFail(error_code);
}
void DidWrite(int64 bytes, bool complete) {
if (!main_thread_->BelongsToCurrentThread()) {
if (complete)
operation_.reset();
main_thread_->PostTask(FROM_HERE, NewRunnableMethod(
this, &IOThreadProxy::DidWrite, bytes, complete));
return;
}
if (simple_writer_)
simple_writer_->DidWrite(bytes, complete);
}
scoped_refptr<base::MessageLoopProxy> io_thread_;
scoped_refptr<base::MessageLoopProxy> main_thread_;
// Only used on the main thread.
base::WeakPtr<BrowserFileWriter> simple_writer_;
// Only used on the io thread.
scoped_ptr<FileSystemOperation> operation_;
scoped_ptr<FileSystemOperation> cancel_operation_;
};
BrowserFileWriter::BrowserFileWriter(
const WebString& path, WebFileWriterClient* client)
: WebFileWriterBase(path, client),
io_thread_proxy_(new IOThreadProxy(AsWeakPtr())) {
}
BrowserFileWriter::~BrowserFileWriter() {
}
void BrowserFileWriter::DoTruncate(const FilePath& path, int64 offset) {
io_thread_proxy_->Truncate(path, offset);
}
void BrowserFileWriter::DoWrite(
const FilePath& path, const GURL& blob_url, int64 offset) {
io_thread_proxy_->Write(path, blob_url, offset);
}
void BrowserFileWriter::DoCancel() {
io_thread_proxy_->Cancel();
}

View File

@ -0,0 +1,44 @@
// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef BROWSER_FILE_WRITER_H_
#define BROWSER_FILE_WRITER_H_
#include "base/ref_counted.h"
#include "base/weak_ptr.h"
#include "webkit/fileapi/webfilewriter_base.h"
class URLRequestContext;
// An implementation of WebFileWriter for use in test_shell and DRT.
class BrowserFileWriter : public fileapi::WebFileWriterBase,
public base::SupportsWeakPtr<BrowserFileWriter> {
public:
BrowserFileWriter(
const WebKit::WebString& path, WebKit::WebFileWriterClient* client);
virtual ~BrowserFileWriter();
// Called by CefProcessIOThread when the thread is created and destroyed.
static void InitializeOnIOThread(URLRequestContext* request_context) {
request_context_ = request_context;
}
static void CleanupOnIOThread() {
request_context_ = NULL;
}
protected:
// WebFileWriterBase overrides
virtual void DoTruncate(const FilePath& path, int64 offset);
virtual void DoWrite(const FilePath& path, const GURL& blob_url,
int64 offset);
virtual void DoCancel();
private:
class IOThreadProxy;
scoped_refptr<IOThreadProxy> io_thread_proxy_;
static URLRequestContext* request_context_;
};
#endif // BROWSER_FILE_WRITER_H_

View File

@ -20,6 +20,27 @@
#include "webkit/blob/blob_storage_controller.h"
#include "webkit/glue/webkit_glue.h"
#if defined(OS_WIN)
#include <winhttp.h>
#pragma comment(lib, "winhttp.lib")
namespace {
// ProxyConfigService implementation that does nothing.
class ProxyConfigServiceNull : public net::ProxyConfigService {
public:
ProxyConfigServiceNull() {}
virtual void AddObserver(Observer* observer) {}
virtual void RemoveObserver(Observer* observer) {}
virtual bool GetLatestProxyConfig(net::ProxyConfig* config) { return true; }
virtual void OnLazyPoll() {}
};
} // namespace
#endif // defined(OS_WIN)
BrowserRequestContext::BrowserRequestContext() {
Init(FilePath(), net::HttpCache::NORMAL, false);
}
@ -42,15 +63,34 @@ void BrowserRequestContext::Init(
accept_language_ = "en-us,en";
accept_charset_ = "iso-8859-1,*,utf-8";
// Use the system proxy settings.
scoped_ptr<net::ProxyConfigService> proxy_config_service(
net::ProxyService::CreateSystemProxyConfigService(
MessageLoop::current(), NULL));
#if defined(OS_WIN)
// Using the system proxy resolver on Windows when "Automatically detect
// settings" (auto-detection) is checked under LAN Settings can hurt resource
// loading performance because the call to WinHttpGetProxyForUrl in
// proxy_resolver_winhttp.cc will block the IO thread. This is especially
// true for Windows 7 where auto-detection is checked by default. To avoid
// slow resource loading on Windows we only use the system proxy resolver if
// auto-detection is unchecked.
WINHTTP_CURRENT_USER_IE_PROXY_CONFIG ie_config = {0};
if (WinHttpGetIEProxyConfigForCurrentUser(&ie_config) &&
ie_config.fAutoDetect == TRUE) {
proxy_service_ = net::ProxyService::CreateWithoutProxyResolver(
new ProxyConfigServiceNull(), NULL);
}
#endif // defined(OS_WIN)
if (!proxy_service_.get()) {
// Use the system proxy resolver.
scoped_ptr<net::ProxyConfigService> proxy_config_service(
net::ProxyService::CreateSystemProxyConfigService(
MessageLoop::current(), NULL));
proxy_service_ = net::ProxyService::CreateUsingSystemProxyResolver(
proxy_config_service.release(), 0, NULL);
}
host_resolver_ =
net::CreateSystemHostResolver(net::HostResolver::kDefaultParallelism,
NULL);
proxy_service_ = net::ProxyService::Create(proxy_config_service.release(),
false, NULL, NULL, NULL, NULL);
ssl_config_service_ = net::SSLConfigService::CreateSystemSSLConfigService();
http_auth_handler_factory_ =
@ -61,8 +101,9 @@ void BrowserRequestContext::Init(
cache_path, 0, BrowserResourceLoaderBridge::GetCacheThread());
net::HttpCache* cache =
new net::HttpCache(host_resolver_, proxy_service_, ssl_config_service_,
http_auth_handler_factory_, NULL, NULL, backend);
new net::HttpCache(host_resolver_, NULL, proxy_service_,
ssl_config_service_, http_auth_handler_factory_, NULL,
NULL, backend);
cache->set_mode(cache_mode);
http_transaction_factory_ = cache;

View File

@ -79,6 +79,7 @@ using net::HttpResponseHeaders;
using net::StaticCookiePolicy;
using webkit_blob::DeletableFileReference;
using webkit_glue::ResourceLoaderBridge;
using webkit_glue::ResourceResponseInfo;
namespace {
@ -147,7 +148,7 @@ class RequestProxy : public URLRequest::Delegate,
// these methods asynchronously.
void NotifyReceivedRedirect(const GURL& new_url,
const ResourceLoaderBridge::ResponseInfo& info) {
const ResourceResponseInfo& info) {
bool has_new_first_party_for_cookies = false;
GURL new_first_party_for_cookies;
if (peer_ && peer_->OnReceivedRedirect(new_url, info,
@ -161,7 +162,7 @@ class RequestProxy : public URLRequest::Delegate,
}
}
void NotifyReceivedResponse(const ResourceLoaderBridge::ResponseInfo& info,
void NotifyReceivedResponse(const ResourceResponseInfo& info,
bool content_filtered) {
if (peer_)
peer_->OnReceivedResponse(info, content_filtered);
@ -294,7 +295,7 @@ class RequestProxy : public URLRequest::Delegate,
} else if(!redirectUrl.empty()) {
// redirect to the specified URL
params->url = GURL(WideToUTF8(redirectUrl));
ResourceLoaderBridge::ResponseInfo info;
ResourceResponseInfo info;
bool defer_redirect;
OnReceivedRedirect(params->url, info, &defer_redirect);
} else if(resourceStream.get()) {
@ -307,7 +308,7 @@ class RequestProxy : public URLRequest::Delegate,
resource_stream_ = resourceStream;
ResourceLoaderBridge::ResponseInfo info;
ResourceResponseInfo info;
info.content_length = static_cast<int64>(offset);
if(!mimeType.empty())
info.mime_type = WideToUTF8(mimeType);
@ -418,7 +419,7 @@ class RequestProxy : public URLRequest::Delegate,
virtual void OnReceivedRedirect(
const GURL& new_url,
const ResourceLoaderBridge::ResponseInfo& info,
const ResourceResponseInfo& info,
bool* defer_redirect) {
*defer_redirect = true; // See AsyncFollowDeferredRedirect
owner_loop_->PostTask(FROM_HERE, NewRunnableMethod(
@ -426,7 +427,7 @@ class RequestProxy : public URLRequest::Delegate,
}
virtual void OnReceivedResponse(
const ResourceLoaderBridge::ResponseInfo& info,
const ResourceResponseInfo& info,
bool content_filtered) {
owner_loop_->PostTask(FROM_HERE, NewRunnableMethod(
this, &RequestProxy::NotifyReceivedResponse, info, content_filtered));
@ -462,14 +463,14 @@ class RequestProxy : public URLRequest::Delegate,
const GURL& new_url,
bool* defer_redirect) {
DCHECK(request->status().is_success());
ResourceLoaderBridge::ResponseInfo info;
ResourceResponseInfo info;
PopulateResponseInfo(request, &info);
OnReceivedRedirect(new_url, info, defer_redirect);
}
virtual void OnResponseStarted(URLRequest* request) {
if (request->status().is_success()) {
ResourceLoaderBridge::ResponseInfo info;
ResourceResponseInfo info;
PopulateResponseInfo(request, &info);
OnReceivedResponse(info, false);
AsyncReadData(); // start reading
@ -549,7 +550,7 @@ class RequestProxy : public URLRequest::Delegate,
}
void PopulateResponseInfo(URLRequest* request,
ResourceLoaderBridge::ResponseInfo* info) const {
ResourceResponseInfo* info) const {
info->request_time = request->request_time();
info->response_time = request->response_time();
info->headers = request->response_headers();
@ -614,7 +615,7 @@ class SyncRequestProxy : public RequestProxy {
virtual void OnReceivedRedirect(
const GURL& new_url,
const ResourceLoaderBridge::ResponseInfo& info,
const ResourceResponseInfo& info,
bool* defer_redirect) {
// TODO(darin): It would be much better if this could live in WebCore, but
// doing so requires API changes at all levels. Similar code exists in
@ -628,9 +629,9 @@ class SyncRequestProxy : public RequestProxy {
}
virtual void OnReceivedResponse(
const ResourceLoaderBridge::ResponseInfo& info,
const ResourceResponseInfo& info,
bool content_filtered) {
*static_cast<ResourceLoaderBridge::ResponseInfo*>(result_) = info;
*static_cast<ResourceResponseInfo*>(result_) = info;
}
virtual void OnReceivedData(int bytes_read) {

View File

@ -13,13 +13,16 @@
#include "webkit/blob/blob_storage_controller.h"
using WebKit::WebBlobData;
using WebKit::WebBlobStorageData;
using WebKit::WebString;
using WebKit::WebURL;
namespace {
MessageLoop* g_io_thread;
webkit_blob::BlobStorageController* g_blob_storage_controller;
} // namespace
/* static */
void BrowserWebBlobRegistryImpl::InitializeOnIOThread(
webkit_blob::BlobStorageController* blob_storage_controller) {
@ -39,15 +42,14 @@ BrowserWebBlobRegistryImpl::BrowserWebBlobRegistryImpl() {
void BrowserWebBlobRegistryImpl::registerBlobURL(
const WebURL& url, WebBlobData& data) {
DCHECK(g_io_thread);
// Note: BlobData is not refcounted thread safe.
scoped_refptr<webkit_blob::BlobData> blob_data(
new webkit_blob::BlobData(data));
blob_data->AddRef(); // Release on DoRegisterBlobURL.
g_io_thread->PostTask(
FROM_HERE,
NewRunnableMethod(this,
&BrowserWebBlobRegistryImpl::DoRegisterBlobUrl,
url,
blob_data.get()));
NewRunnableMethod(
this, &BrowserWebBlobRegistryImpl::DoRegisterBlobUrl, url,
blob_data.release())); // Released in DoRegisterBlobUrl.
}
void BrowserWebBlobRegistryImpl::registerBlobURL(

View File

@ -7,9 +7,9 @@
#define _BROWSER_WEBKIT_INIT_H
#include "base/file_util.h"
#include "base/metrics/stats_counters.h"
#include "base/path_service.h"
#include "base/scoped_temp_dir.h"
#include "base/stats_counters.h"
#include "base/utf_string_conversions.h"
#include "media/base/media.h"
#include "webkit/appcache/web_application_cache_host_impl.h"
@ -45,7 +45,7 @@
class BrowserWebKitInit : public webkit_glue::WebKitClientImpl {
public:
explicit BrowserWebKitInit() {
v8::V8::SetCounterFunction(StatsTable::FindLocation);
v8::V8::SetCounterFunction(base::StatsTable::FindLocation);
WebKit::initialize(this);
WebKit::setLayoutTestMode(false);

View File

@ -523,9 +523,6 @@ WebPlugin* BrowserWebViewDelegate::createPlugin(
return NULL;
}
if (actual_mime_type.empty())
actual_mime_type = params.mimeType.utf8();
return new webkit_glue::WebPluginImpl(
frame, params, info.path, actual_mime_type, AsWeakPtr());
}
@ -545,7 +542,7 @@ WebMediaPlayer* BrowserWebViewDelegate::createMediaPlayer(
// should be grouped together.
webkit_glue::MediaResourceLoaderBridgeFactory* bridge_factory =
new webkit_glue::MediaResourceLoaderBridgeFactory(
GURL(), // referrer
GURL(frame->url()), // referrer
"null", // frame origin
"null", // main_frame_origin
base::GetCurrentProcId(),
@ -806,6 +803,7 @@ void BrowserWebViewDelegate::openFileSystem(
// The FileSystem temp directory was not initialized successfully.
callbacks->didFail(WebKit::WebFileErrorSecurity);
} else {
// TODO(michaeln): need to put origin/type in the path.
callbacks->didOpenFileSystem(
"CefFileSystem",
webkit_glue::FilePathToWebString(browser_->file_system_root()));

View File

@ -378,7 +378,7 @@ void BrowserWebViewDelegate::showContextMenu(
DestroyMenu(menu);
end:
MessageLoop::current()->SetNestableTasksAllowed(old_state);
MessageLoop::current()->SetNestableTasksAllowed(old_state);
}
// Private methods ------------------------------------------------------------

View File

@ -6,6 +6,7 @@
#include "cef_process_io_thread.h"
#include "cef_context.h"
#include "browser_appcache_system.h"
#include "browser_file_writer.h"
#include "browser_resource_loader_bridge.h"
#include "browser_socket_stream_bridge.h"
#include "browser_webblobregistry_impl.h"
@ -46,6 +47,7 @@ void CefProcessIOThread::Init() {
_Context->set_request_context(request_context_);
BrowserAppCacheSystem::InitializeOnIOThread(request_context_);
BrowserFileWriter::InitializeOnIOThread(request_context_);
BrowserSocketStreamBridge::InitializeOnIOThread(request_context_);
BrowserWebBlobRegistryImpl::InitializeOnIOThread(
request_context_->blob_storage_controller());
@ -57,6 +59,7 @@ void CefProcessIOThread::CleanUp() {
// purify leak-test results.
MessageLoop::current()->RunAllPending();
BrowserFileWriter::CleanupOnIOThread();
BrowserSocketStreamBridge::Cleanup();
BrowserWebBlobRegistryImpl::Cleanup();

View File

@ -13,8 +13,8 @@
#include "base/command_line.h"
#include "base/i18n/icu_util.h"
#include "base/metrics/stats_table.h"
#include "base/rand_util.h"
#include "base/stats_table.h"
#include "base/string_number_conversions.h"
#include "build/build_config.h"
#include "app/gfx/gl/gl_implementation.h"
@ -128,11 +128,11 @@ void CefProcessUIThread::Init() {
// Load and initialize the stats table. Attempt to construct a somewhat
// unique name to isolate separate instances from each other.
statstable_ = new StatsTable(
statstable_ = new base::StatsTable(
kStatsFilePrefix + base::Uint64ToString(base::RandUint64()),
kStatsFileThreads,
kStatsFileCounters);
StatsTable::set_current(statstable_);
base::StatsTable::set_current(statstable_);
// CEF always exposes the GC.
webkit_glue::SetJavaScriptFlags("--expose-gc");
@ -159,7 +159,7 @@ void CefProcessUIThread::CleanUp() {
MessageLoop::current()->RunAllPending();
// Tear down the shared StatsTable.
StatsTable::set_current(NULL);
base::StatsTable::set_current(NULL);
delete statstable_;
statstable_ = NULL;

View File

@ -10,7 +10,9 @@
#include "cef_thread.h"
class BrowserWebKitInit;
namespace base {
class StatsTable;
}
// ----------------------------------------------------------------------------
// CefProcessUIThread
@ -31,7 +33,7 @@ class CefProcessUIThread : public CefThread {
virtual void CleanUp();
private:
StatsTable* statstable_;
base::StatsTable* statstable_;
// WebKit implementation class.
BrowserWebKitInit* webkit_init_;

View File

@ -304,6 +304,7 @@ void WebWidgetHost::Resize(LPARAM lparam) {
void WebWidgetHost::MouseEvent(UINT message, WPARAM wparam, LPARAM lparam) {
const WebMouseEvent& event = WebInputEventFactory::mouseEvent(
view_, message, wparam, lparam);
webwidget_->handleInputEvent(event);
switch (event.type) {
case WebInputEvent::MouseMove:
TrackMouseLeave(true);
@ -324,7 +325,6 @@ void WebWidgetHost::MouseEvent(UINT message, WPARAM wparam, LPARAM lparam) {
ReleaseCapture();
break;
}
webwidget_->handleInputEvent(event);
}
void WebWidgetHost::WheelEvent(WPARAM wparam, LPARAM lparam) {

View File

@ -91,9 +91,9 @@ CEF_EXPORT int cef_register_plugin(const cef_plugin_info_t* plugin_info)
std::vector<std::wstring> mime_types, file_extensions;
std::vector<std::wstring> descriptions;
SplitString(plugin_info->mime_types, '|', &mime_types);
SplitString(plugin_info->file_extensions, '|', &file_extensions);
SplitString(plugin_info->type_descriptions, '|', &descriptions);
base::SplitString(plugin_info->mime_types, '|', &mime_types);
base::SplitString(plugin_info->file_extensions, '|', &file_extensions);
base::SplitString(plugin_info->type_descriptions, '|', &descriptions);
for (size_t i = 0; i < mime_types.size(); ++i) {
CefPluginMimeType mimeType;
@ -101,7 +101,7 @@ CEF_EXPORT int cef_register_plugin(const cef_plugin_info_t* plugin_info)
mimeType.mime_type = mime_types[i];
if (file_extensions.size() > i)
SplitString(file_extensions[i], ',', &mimeType.file_extensions);
base::SplitString(file_extensions[i], ',', &mimeType.file_extensions);
if (descriptions.size() > i)
mimeType.description = descriptions[i];

View File

@ -381,8 +381,8 @@ public:
new ClientReadHandler(pBytes, dwSize));
mimeType = L"text/html";
}
} else if(wcsstr(url.c_str(), L"/logo1w.png") != NULL) {
// Any time we find "logo.gif" in the URL substitute in our own image
} else if(wcsstr(url.c_str(), L"/ps_logo2.png") != NULL) {
// Any time we find "ps_logo2.png" in the URL substitute in our own image
if(LoadBinaryResource(IDS_LOGO, dwSize, pBytes)) {
resourceStream = CefStreamReader::CreateForHandler(
new ClientReadHandler(pBytes, dwSize));