libcef: Update due to underlying chromium changes.
- Add unique IDs for browser instances because ResourceLoaderBridge::Create() now receives a routing ID instead of a WebFrame pointer. The unique ID is assigned to a browser in CefContext::AddBrowser() and attached to a request in BrowserWebViewDelegate::WillSendRequest(). - Add upload progress notification support to resource loader bridge. - WebFrame::ExecuteJavaScript() changed to WebFrame::ExecuteScript(). - More functions moved into webkit_glue::WebKitClientImpl. git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@22 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
parent
d942863661
commit
3f5a01e969
|
@ -7,6 +7,12 @@ development team. The current CEF revision may be newer than the last CEF
|
||||||
revision listed in this document. In that case, it means that the current CEF
|
revision listed in this document. In that case, it means that the current CEF
|
||||||
revision is compatible with the last listed Chromium revision.
|
revision is compatible with the last listed Chromium revision.
|
||||||
|
|
||||||
|
To update Chromium to a specific revision run the following command, where ####
|
||||||
|
is the Chromium revision number that you wish to download.
|
||||||
|
|
||||||
|
gclient sync --revision src@#### --force
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Date | CEF Revision | Chromium Revision
|
Date | CEF Revision | Chromium Revision
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
@ -22,3 +28,4 @@ Date | CEF Revision | Chromium Revision
|
||||||
2009-02-12 | /trunk@15 | /trunk@9652
|
2009-02-12 | /trunk@15 | /trunk@9652
|
||||||
2009-03-05 | /trunk@17 | /trunk@10987
|
2009-03-05 | /trunk@17 | /trunk@10987
|
||||||
2009-03-09 | /trunk@21 | /trunk@11252
|
2009-03-09 | /trunk@21 | /trunk@11252
|
||||||
|
2009-03-24 | /trunk@22 | /trunk@11768
|
||||||
|
|
|
@ -10,13 +10,15 @@
|
||||||
|
|
||||||
#include "base/string_util.h"
|
#include "base/string_util.h"
|
||||||
#include "webkit/glue/webframe.h"
|
#include "webkit/glue/webframe.h"
|
||||||
|
#include "webkit/glue/webscriptsource.h"
|
||||||
|
|
||||||
|
|
||||||
CefBrowserImpl::CefBrowserImpl(CefWindowInfo& windowInfo, bool popup,
|
CefBrowserImpl::CefBrowserImpl(CefWindowInfo& windowInfo, bool popup,
|
||||||
CefRefPtr<CefHandler> handler,
|
CefRefPtr<CefHandler> handler,
|
||||||
const std::wstring& url)
|
const std::wstring& url)
|
||||||
: window_info_(windowInfo), is_popup_(popup), is_modal_(false),
|
: window_info_(windowInfo), is_popup_(popup), is_modal_(false),
|
||||||
handler_(handler), webviewhost_(NULL), popuphost_(NULL), url_(url)
|
handler_(handler), webviewhost_(NULL), popuphost_(NULL), url_(url),
|
||||||
|
unique_id_(0)
|
||||||
{
|
{
|
||||||
delegate_ = new BrowserWebViewDelegate(this);
|
delegate_ = new BrowserWebViewDelegate(this);
|
||||||
nav_controller_.reset(new BrowserNavigationController(this));
|
nav_controller_.reset(new BrowserNavigationController(this));
|
||||||
|
@ -451,7 +453,9 @@ void CefBrowserImpl::UIT_ExecuteJavaScript(const std::wstring& js_code,
|
||||||
else
|
else
|
||||||
frame = UIT_GetWebView()->GetMainFrame();
|
frame = UIT_GetWebView()->GetMainFrame();
|
||||||
|
|
||||||
frame->ExecuteJavaScript(WideToUTF8(js_code), GURL(script_url), start_line);
|
frame->ExecuteScript(
|
||||||
|
webkit_glue::WebScriptSource(WideToUTF8(js_code), GURL(script_url),
|
||||||
|
start_line));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CefBrowserImpl::UIT_GoBackOrForward(int offset)
|
void CefBrowserImpl::UIT_GoBackOrForward(int offset)
|
||||||
|
|
|
@ -192,6 +192,9 @@ public:
|
||||||
int UIT_SwitchFrameToPrintMediaType(WebFrame* frame);
|
int UIT_SwitchFrameToPrintMediaType(WebFrame* frame);
|
||||||
int UIT_GetPagesCount(WebFrame* frame);
|
int UIT_GetPagesCount(WebFrame* frame);
|
||||||
|
|
||||||
|
void UIT_SetUniqueID(int id) { unique_id_ = id; }
|
||||||
|
int UIT_GetUniqueID() { return unique_id_; }
|
||||||
|
|
||||||
#if defined(OS_WIN)
|
#if defined(OS_WIN)
|
||||||
void UIT_DisableWebView(bool val);
|
void UIT_DisableWebView(bool val);
|
||||||
bool UIT_IsWebViewDisabled() { return (webview_bitmap_ != NULL); }
|
bool UIT_IsWebViewDisabled() { return (webview_bitmap_ != NULL); }
|
||||||
|
@ -228,6 +231,9 @@ protected:
|
||||||
typedef std::map<std::wstring, CefRefPtr<CefJSContainer> > JSContainerMap;
|
typedef std::map<std::wstring, CefRefPtr<CefJSContainer> > JSContainerMap;
|
||||||
JSContainerMap jscontainers_;
|
JSContainerMap jscontainers_;
|
||||||
|
|
||||||
|
// Unique browser ID assigned by the context.
|
||||||
|
int unique_id_;
|
||||||
|
|
||||||
#if defined(OS_WIN)
|
#if defined(OS_WIN)
|
||||||
HBITMAP webview_bitmap_;
|
HBITMAP webview_bitmap_;
|
||||||
SIZE webview_bitmap_size_;
|
SIZE webview_bitmap_size_;
|
||||||
|
|
|
@ -40,10 +40,12 @@
|
||||||
#include "base/message_loop.h"
|
#include "base/message_loop.h"
|
||||||
#include "base/ref_counted.h"
|
#include "base/ref_counted.h"
|
||||||
#include "base/string_util.h"
|
#include "base/string_util.h"
|
||||||
|
#include "base/time.h"
|
||||||
#include "base/thread.h"
|
#include "base/thread.h"
|
||||||
#include "base/waitable_event.h"
|
#include "base/waitable_event.h"
|
||||||
#include "net/base/cookie_monster.h"
|
#include "net/base/cookie_monster.h"
|
||||||
#include "net/base/io_buffer.h"
|
#include "net/base/io_buffer.h"
|
||||||
|
#include "net/base/load_flags.h"
|
||||||
#include "net/base/net_util.h"
|
#include "net/base/net_util.h"
|
||||||
#include "net/base/upload_data.h"
|
#include "net/base/upload_data.h"
|
||||||
#include "net/http/http_response_headers.h"
|
#include "net/http/http_response_headers.h"
|
||||||
|
@ -107,6 +109,9 @@ struct RequestParams {
|
||||||
scoped_refptr<net::UploadData> upload;
|
scoped_refptr<net::UploadData> upload;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// The interval for calls to RequestProxy::MaybeUpdateUploadProgress
|
||||||
|
static const int kUpdateUploadProgressIntervalMsec = 100;
|
||||||
|
|
||||||
// The RequestProxy does most of its work on the IO thread. The Start and
|
// The RequestProxy does most of its work on the IO thread. The Start and
|
||||||
// Cancel methods are proxied over to the IO thread, where an URLRequest object
|
// Cancel methods are proxied over to the IO thread, where an URLRequest object
|
||||||
// is instantiated.
|
// is instantiated.
|
||||||
|
@ -115,7 +120,9 @@ class RequestProxy : public URLRequest::Delegate,
|
||||||
public:
|
public:
|
||||||
// Takes ownership of the params.
|
// Takes ownership of the params.
|
||||||
RequestProxy(CefRefPtr<CefBrowser> browser)
|
RequestProxy(CefRefPtr<CefBrowser> browser)
|
||||||
: browser_(browser), buf_(new net::IOBuffer(kDataSize))
|
: browser_(browser),
|
||||||
|
buf_(new net::IOBuffer(kDataSize)),
|
||||||
|
last_upload_position_(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -150,6 +157,11 @@ class RequestProxy : public URLRequest::Delegate,
|
||||||
// various URLRequest callbacks. The event hooks, defined below, trigger
|
// various URLRequest callbacks. The event hooks, defined below, trigger
|
||||||
// these methods asynchronously.
|
// these methods asynchronously.
|
||||||
|
|
||||||
|
void NotifyUploadProgress(uint64 position, uint64 size) {
|
||||||
|
if (peer_)
|
||||||
|
peer_->OnUploadProgress(position, size);
|
||||||
|
}
|
||||||
|
|
||||||
void NotifyReceivedRedirect(const GURL& new_url) {
|
void NotifyReceivedRedirect(const GURL& new_url) {
|
||||||
if (peer_)
|
if (peer_)
|
||||||
peer_->OnReceivedRedirect(new_url);
|
peer_->OnReceivedRedirect(new_url);
|
||||||
|
@ -197,7 +209,7 @@ class RequestProxy : public URLRequest::Delegate,
|
||||||
void AsyncStart(RequestParams* params) {
|
void AsyncStart(RequestParams* params) {
|
||||||
bool handled = false;
|
bool handled = false;
|
||||||
|
|
||||||
if (browser_) {
|
if (browser_.get()) {
|
||||||
CefRefPtr<CefHandler> handler = browser_->GetHandler();
|
CefRefPtr<CefHandler> handler = browser_->GetHandler();
|
||||||
if(handler.get())
|
if(handler.get())
|
||||||
{
|
{
|
||||||
|
@ -259,6 +271,7 @@ class RequestProxy : public URLRequest::Delegate,
|
||||||
AsyncReadData();
|
AsyncReadData();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(!handled)
|
if(!handled)
|
||||||
{
|
{
|
||||||
|
@ -271,6 +284,12 @@ class RequestProxy : public URLRequest::Delegate,
|
||||||
request_->set_upload(params->upload.get());
|
request_->set_upload(params->upload.get());
|
||||||
request_->set_context(request_context);
|
request_->set_context(request_context);
|
||||||
request_->Start();
|
request_->Start();
|
||||||
|
|
||||||
|
if (request_->has_upload() &&
|
||||||
|
params->load_flags & net::LOAD_ENABLE_UPLOAD_PROGRESS) {
|
||||||
|
upload_progress_timer_.Start(
|
||||||
|
base::TimeDelta::FromMilliseconds(kUpdateUploadProgressIntervalMsec),
|
||||||
|
this, &RequestProxy::MaybeUpdateUploadProgress);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -384,12 +403,44 @@ class RequestProxy : public URLRequest::Delegate,
|
||||||
std::string());
|
std::string());
|
||||||
resource_stream_ = NULL;
|
resource_stream_ = NULL;
|
||||||
} else {
|
} else {
|
||||||
|
if (upload_progress_timer_.IsRunning()) {
|
||||||
|
MaybeUpdateUploadProgress();
|
||||||
|
upload_progress_timer_.Stop();
|
||||||
|
}
|
||||||
|
|
||||||
DCHECK(request_.get());
|
DCHECK(request_.get());
|
||||||
OnCompletedRequest(request_->status(), std::string());
|
OnCompletedRequest(request_->status(), std::string());
|
||||||
request_.reset(); // destroy on the io thread
|
request_.reset(); // destroy on the io thread
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Called on the IO thread.
|
||||||
|
void MaybeUpdateUploadProgress() {
|
||||||
|
uint64 size = request_->get_upload()->GetContentLength();
|
||||||
|
uint64 position = request_->GetUploadProgress();
|
||||||
|
if (position == last_upload_position_)
|
||||||
|
return; // no progress made since last time
|
||||||
|
|
||||||
|
const uint64 kHalfPercentIncrements = 200;
|
||||||
|
const base::TimeDelta kOneSecond = base::TimeDelta::FromMilliseconds(1000);
|
||||||
|
|
||||||
|
uint64 amt_since_last = position - last_upload_position_;
|
||||||
|
base::TimeDelta time_since_last = base::TimeTicks::Now() -
|
||||||
|
last_upload_ticks_;
|
||||||
|
|
||||||
|
bool is_finished = (size == position);
|
||||||
|
bool enough_new_progress = (amt_since_last > (size /
|
||||||
|
kHalfPercentIncrements));
|
||||||
|
bool too_much_time_passed = time_since_last > kOneSecond;
|
||||||
|
|
||||||
|
if (is_finished || enough_new_progress || too_much_time_passed) {
|
||||||
|
owner_loop_->PostTask(FROM_HERE, NewRunnableMethod(
|
||||||
|
this, &RequestProxy::NotifyUploadProgress, position, size));
|
||||||
|
last_upload_ticks_ = base::TimeTicks::Now();
|
||||||
|
last_upload_position_ = position;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
scoped_ptr<URLRequest> request_;
|
scoped_ptr<URLRequest> request_;
|
||||||
CefRefPtr<CefStreamReader> resource_stream_;
|
CefRefPtr<CefStreamReader> resource_stream_;
|
||||||
|
|
||||||
|
@ -407,6 +458,13 @@ class RequestProxy : public URLRequest::Delegate,
|
||||||
// not manage its lifetime, and we may only access it from the owner's
|
// not manage its lifetime, and we may only access it from the owner's
|
||||||
// message loop (owner_loop_).
|
// message loop (owner_loop_).
|
||||||
ResourceLoaderBridge::Peer* peer_;
|
ResourceLoaderBridge::Peer* peer_;
|
||||||
|
|
||||||
|
// Timer used to pull upload progress info.
|
||||||
|
base::RepeatingTimer<RequestProxy> upload_progress_timer_;
|
||||||
|
|
||||||
|
// Info used to determine whether or not to send an upload progress update.
|
||||||
|
uint64 last_upload_position_;
|
||||||
|
base::TimeTicks last_upload_ticks_;
|
||||||
};
|
};
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
@ -590,21 +648,19 @@ namespace webkit_glue {
|
||||||
|
|
||||||
// factory function
|
// factory function
|
||||||
ResourceLoaderBridge* ResourceLoaderBridge::Create(
|
ResourceLoaderBridge* ResourceLoaderBridge::Create(
|
||||||
WebFrame* webframe,
|
|
||||||
const std::string& method,
|
const std::string& method,
|
||||||
const GURL& url,
|
const GURL& url,
|
||||||
const GURL& policy_url,
|
const GURL& policy_url,
|
||||||
const GURL& referrer,
|
const GURL& referrer,
|
||||||
const std::string& headers,
|
const std::string& headers,
|
||||||
int load_flags,
|
int load_flags,
|
||||||
int origin_pid,
|
int requestor_pid,
|
||||||
ResourceType::Type request_type,
|
ResourceType::Type request_type,
|
||||||
bool mixed_contents) {
|
bool mixed_contents,
|
||||||
return new ResourceLoaderBridgeImpl(
|
int routing_id) {
|
||||||
(webframe->GetView()->GetDelegate() ?
|
CefRefPtr<CefBrowser> browser = _Context->GetBrowserByID(routing_id);
|
||||||
static_cast<BrowserWebViewDelegate*>(
|
return new ResourceLoaderBridgeImpl(browser, method, url, policy_url,
|
||||||
webframe->GetView()->GetDelegate())->GetBrowser() : NULL),
|
referrer, headers, load_flags);
|
||||||
method, url, policy_url, referrer, headers, load_flags);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Issue the proxy resolve request on the io thread, and wait
|
// Issue the proxy resolve request on the io thread, and wait
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#include "browser_webkit_glue.h"
|
#include "browser_webkit_glue.h"
|
||||||
|
|
||||||
#include "base/compiler_specific.h"
|
#include "base/compiler_specific.h"
|
||||||
|
#include "base/logging.h"
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "webkit_version.h"
|
#include "webkit_version.h"
|
||||||
|
|
|
@ -22,10 +22,14 @@
|
||||||
class BrowserWebKitInit : public webkit_glue::WebKitClientImpl {
|
class BrowserWebKitInit : public webkit_glue::WebKitClientImpl {
|
||||||
public:
|
public:
|
||||||
BrowserWebKitInit() {
|
BrowserWebKitInit() {
|
||||||
|
v8::V8::SetCounterFunction(StatsTable::FindLocation);
|
||||||
|
|
||||||
WebKit::initialize(this);
|
WebKit::initialize(this);
|
||||||
WebKit::setLayoutTestMode(false);
|
WebKit::setLayoutTestMode(false);
|
||||||
WebKit::registerURLSchemeAsLocal(
|
WebKit::registerURLSchemeAsLocal(
|
||||||
ASCIIToUTF16(webkit_glue::GetUIResourceProtocol()));
|
ASCIIToUTF16(webkit_glue::GetUIResourceProtocol()));
|
||||||
|
WebKit::registerURLSchemeAsNoAccess(
|
||||||
|
ASCIIToUTF16(webkit_glue::GetUIResourceProtocol()));
|
||||||
WebKit::registerExtension(extensions_v8::GearsExtension::Get());
|
WebKit::registerExtension(extensions_v8::GearsExtension::Get());
|
||||||
WebKit::registerExtension(extensions_v8::IntervalExtension::Get());
|
WebKit::registerExtension(extensions_v8::IntervalExtension::Get());
|
||||||
}
|
}
|
||||||
|
@ -38,6 +42,10 @@ class BrowserWebKitInit : public webkit_glue::WebKitClientImpl {
|
||||||
return &mime_registry_;
|
return &mime_registry_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual WebKit::WebSandboxSupport* sandboxSupport() {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
virtual uint64_t visitedLinkHash(const char* canonicalURL, size_t length) {
|
virtual uint64_t visitedLinkHash(const char* canonicalURL, size_t length) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -84,11 +92,6 @@ class BrowserWebKitInit : public webkit_glue::WebKitClientImpl {
|
||||||
return ASCIIToUTF16("en-US");
|
return ASCIIToUTF16("en-US");
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void decrementStatsCounter(const char* name) {}
|
|
||||||
virtual void incrementStatsCounter(const char* name) {}
|
|
||||||
virtual void traceEventBegin(const char* name, void* id, const char* extra) {}
|
|
||||||
virtual void traceEventEnd(const char* name, void* id, const char* extra) {}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
webkit_glue::SimpleWebMimeRegistryImpl mime_registry_;
|
webkit_glue::SimpleWebMimeRegistryImpl mime_registry_;
|
||||||
};
|
};
|
||||||
|
|
|
@ -166,6 +166,9 @@ void BrowserWebViewDelegate::AssignIdentifierToRequest(WebView* webview,
|
||||||
void BrowserWebViewDelegate::WillSendRequest(WebView* webview,
|
void BrowserWebViewDelegate::WillSendRequest(WebView* webview,
|
||||||
uint32 identifier,
|
uint32 identifier,
|
||||||
WebRequest* request) {
|
WebRequest* request) {
|
||||||
|
// The requestor ID is used by the resource loader bridge to locate the
|
||||||
|
// browser that originated the request.
|
||||||
|
request->SetRequestorID(browser_->UIT_GetUniqueID());
|
||||||
}
|
}
|
||||||
|
|
||||||
void BrowserWebViewDelegate::DidFinishLoading(WebView* webview,
|
void BrowserWebViewDelegate::DidFinishLoading(WebView* webview,
|
||||||
|
|
|
@ -255,6 +255,7 @@ CefContext::CefContext()
|
||||||
in_transition_ = false;
|
in_transition_ = false;
|
||||||
webprefs_ = NULL;
|
webprefs_ = NULL;
|
||||||
hinstance_ = ::GetModuleHandle(NULL);
|
hinstance_ = ::GetModuleHandle(NULL);
|
||||||
|
next_browser_id_ = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
CefContext::~CefContext()
|
CefContext::~CefContext()
|
||||||
|
@ -462,7 +463,10 @@ bool CefContext::AddBrowser(CefRefPtr<CefBrowserImpl> browser)
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!found)
|
if(!found)
|
||||||
|
{
|
||||||
|
browser->UIT_SetUniqueID(next_browser_id_++);
|
||||||
browserlist_.push_back(browser);
|
browserlist_.push_back(browser);
|
||||||
|
}
|
||||||
|
|
||||||
Unlock();
|
Unlock();
|
||||||
return !found;
|
return !found;
|
||||||
|
@ -483,11 +487,32 @@ bool CefContext::RemoveBrowser(CefRefPtr<CefBrowserImpl> browser)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (browserlist_.empty())
|
||||||
|
next_browser_id_ = 1;
|
||||||
|
|
||||||
Unlock();
|
Unlock();
|
||||||
|
|
||||||
return deleted;
|
return deleted;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CefRefPtr<CefBrowserImpl> CefContext::GetBrowserByID(int id)
|
||||||
|
{
|
||||||
|
CefRefPtr<CefBrowserImpl> browser;
|
||||||
|
Lock();
|
||||||
|
|
||||||
|
BrowserList::const_iterator it = browserlist_.begin();
|
||||||
|
for(; it != browserlist_.end(); ++it) {
|
||||||
|
if(it->get()->UIT_GetUniqueID() == id) {
|
||||||
|
browser = it->get();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Unlock();
|
||||||
|
|
||||||
|
return browser;
|
||||||
|
}
|
||||||
|
|
||||||
void CefContext::SetMessageLoopForUI(MessageLoopForUI* loop)
|
void CefContext::SetMessageLoopForUI(MessageLoopForUI* loop)
|
||||||
{
|
{
|
||||||
Lock();
|
Lock();
|
||||||
|
|
|
@ -40,6 +40,7 @@ public:
|
||||||
|
|
||||||
bool AddBrowser(CefRefPtr<CefBrowserImpl> browser);
|
bool AddBrowser(CefRefPtr<CefBrowserImpl> browser);
|
||||||
bool RemoveBrowser(CefRefPtr<CefBrowserImpl> browser);
|
bool RemoveBrowser(CefRefPtr<CefBrowserImpl> browser);
|
||||||
|
CefRefPtr<CefBrowserImpl> GetBrowserByID(int id);
|
||||||
BrowserList* GetBrowserList() { return &browserlist_; }
|
BrowserList* GetBrowserList() { return &browserlist_; }
|
||||||
|
|
||||||
// Returns true if the calling thread is the same as the UI thread
|
// Returns true if the calling thread is the same as the UI thread
|
||||||
|
@ -80,6 +81,9 @@ protected:
|
||||||
// Initialize WebKit for this scope.
|
// Initialize WebKit for this scope.
|
||||||
BrowserWebKitInit webkit_init_;
|
BrowserWebKitInit webkit_init_;
|
||||||
|
|
||||||
|
// Used for assigning unique IDs to browser instances.
|
||||||
|
int next_browser_id_;
|
||||||
|
|
||||||
friend DWORD WINAPI ThreadHandlerUI(LPVOID lpParam);
|
friend DWORD WINAPI ThreadHandlerUI(LPVOID lpParam);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
#include "base/basictypes.h"
|
#include "base/basictypes.h"
|
||||||
#include "base/gfx/native_widget_types.h"
|
#include "base/gfx/native_widget_types.h"
|
||||||
#include "base/gfx/rect.h"
|
#include "base/gfx/rect.h"
|
||||||
#include "base/scoped_ptr.h"
|
|
||||||
#include "webwidget_host.h"
|
#include "webwidget_host.h"
|
||||||
|
|
||||||
struct WebPreferences;
|
struct WebPreferences;
|
||||||
|
|
Loading…
Reference in New Issue