libcef: Update due to underlying chromium changes & bug fixes.

- Add v8_snapshot_cc project dependency (Issue # 11, fix by: vridosh)
- Fix possible crash on exit in browser_resource_loader_bridge.cc (Issue # 12, fix by: vridosh).
- localized_strings project renamed to webkit_strings.
- GetBitmapResource() in browser_webkit_glue.cc now returns GlueBitmap* instead of GlueBitmap.
- GetLocalizedString() in browser_webkit_glue_win.cc now returns string16 instead of std::wstring.
- Add BrowserWebViewDelegate::SetStatusbarText() method.
- Move BrowserWebViewDelegate::DidMove() from browser_webview_delegate.cc to browser_webview_delegate_win.cc.
- Move FromWindow() predefine in webwidget_host out of the header file.

git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@15 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
Marshall Greenblatt
2009-02-12 16:25:52 +00:00
parent 577b8387cf
commit e75e27e32c
10 changed files with 198 additions and 165 deletions

View File

@@ -195,78 +195,80 @@ class RequestProxy : public URLRequest::Delegate,
void AsyncStart(RequestParams* params) {
bool handled = false;
CefRefPtr<CefHandler> handler = browser_->GetHandler();
if(handler.get())
{
// Build the request object for passing to the handler
CefRefPtr<CefRequest> request(new CefRequestImpl());
CefRequestImpl* requestimpl = static_cast<CefRequestImpl*>(request.get());
if (browser_) {
CefRefPtr<CefHandler> handler = browser_->GetHandler();
if(handler.get())
{
// Build the request object for passing to the handler
CefRefPtr<CefRequest> request(new CefRequestImpl());
CefRequestImpl* requestimpl = static_cast<CefRequestImpl*>(request.get());
requestimpl->SetURL(UTF8ToWide(params->url.spec()));
requestimpl->SetMethod(UTF8ToWide(params->method));
// TODO(cef): Parse the extra header values from params->headers and
// add to the header map.
CefRequest::HeaderMap headerMap;
headerMap.insert(
std::make_pair(L"Referrer", UTF8ToWide(params->referrer.spec())));
requestimpl->SetURL(UTF8ToWide(params->url.spec()));
requestimpl->SetMethod(UTF8ToWide(params->method));
// TODO(cef): Parse the extra header values from params->headers and
// add to the header map.
CefRequest::HeaderMap headerMap;
headerMap.insert(
std::make_pair(L"Referrer", UTF8ToWide(params->referrer.spec())));
requestimpl->SetHeaderMap(headerMap);
requestimpl->SetHeaderMap(headerMap);
scoped_refptr<net::UploadData> upload = params->upload;
CefRefPtr<CefPostData> postdata;
if(upload.get()) {
postdata = new CefPostDataImpl();
static_cast<CefPostDataImpl*>(postdata.get())->Set(*upload.get());
requestimpl->SetPostData(postdata);
}
scoped_refptr<net::UploadData> upload = params->upload;
CefRefPtr<CefPostData> postdata;
if(upload.get()) {
postdata = new CefPostDataImpl();
static_cast<CefPostDataImpl*>(postdata.get())->Set(*upload.get());
requestimpl->SetPostData(postdata);
}
int loadFlags = params->load_flags;
int loadFlags = params->load_flags;
// Handler output will be returned in these variables
std::wstring redirectUrl;
CefRefPtr<CefStreamReader> resourceStream;
std::wstring mimeType;
CefHandler::RetVal rv = handler->HandleBeforeResourceLoad(
browser_, request, redirectUrl, resourceStream, mimeType, loadFlags);
if(rv == CefHandler::RV_HANDLED) {
// cancel the resource load
handled = true;
OnCompletedRequest(URLRequestStatus(URLRequestStatus::CANCELED, 0));
} else if(!redirectUrl.empty()) {
// redirect to the specified URL
params->url = GURL(WideToUTF8(redirectUrl));
OnReceivedRedirect(params->url);
} else if(resourceStream.get()) {
// load from the provided resource stream
handled = true;
// Handler output will be returned in these variables
std::wstring redirectUrl;
CefRefPtr<CefStreamReader> resourceStream;
std::wstring mimeType;
CefHandler::RetVal rv = handler->HandleBeforeResourceLoad(
browser_, request, redirectUrl, resourceStream, mimeType, loadFlags);
if(rv == CefHandler::RV_HANDLED) {
// cancel the resource load
handled = true;
OnCompletedRequest(URLRequestStatus(URLRequestStatus::CANCELED, 0));
} else if(!redirectUrl.empty()) {
// redirect to the specified URL
params->url = GURL(WideToUTF8(redirectUrl));
OnReceivedRedirect(params->url);
} else if(resourceStream.get()) {
// load from the provided resource stream
handled = true;
long offset = resourceStream->Seek(0, SEEK_END);
resourceStream->Seek(0, SEEK_SET);
long offset = resourceStream->Seek(0, SEEK_END);
resourceStream->Seek(0, SEEK_SET);
resource_stream_ = resourceStream;
resource_stream_ = resourceStream;
ResourceLoaderBridge::ResponseInfo info;
info.content_length = static_cast<int64>(offset);
if(!mimeType.empty())
info.mime_type = WideToUTF8(mimeType);
OnReceivedResponse(info, false);
AsyncReadData();
ResourceLoaderBridge::ResponseInfo info;
info.content_length = static_cast<int64>(offset);
if(!mimeType.empty())
info.mime_type = WideToUTF8(mimeType);
OnReceivedResponse(info, false);
AsyncReadData();
}
}
if(!handled)
{
request_.reset(new URLRequest(params->url, this));
request_->set_method(params->method);
request_->set_policy_url(params->policy_url);
request_->set_referrer(params->referrer.spec());
request_->SetExtraRequestHeaders(params->headers);
request_->set_load_flags(params->load_flags);
request_->set_upload(params->upload.get());
request_->set_context(request_context);
request_->Start();
}
}
if(!handled)
{
request_.reset(new URLRequest(params->url, this));
request_->set_method(params->method);
request_->set_policy_url(params->policy_url);
request_->set_referrer(params->referrer.spec());
request_->SetExtraRequestHeaders(params->headers);
request_->set_load_flags(params->load_flags);
request_->set_upload(params->upload.get());
request_->set_context(request_context);
request_->Start();
}
delete params;

View File

@@ -104,7 +104,12 @@ std::string GetDataResource(int resource_id) {
}
}
GlueBitmap GetBitmapResource(int resource_id) {
#if defined(OS_MACOSX)
SkBitmap*
#else
GlueBitmap*
#endif
GetBitmapResource(int resource_id) {
return NULL;
}

View File

@@ -28,7 +28,7 @@ MSVC_POP_WARNING();
namespace webkit_glue {
std::wstring GetLocalizedString(int message_id) {
string16 GetLocalizedString(int message_id) {
const ATLSTRINGRESOURCEIMAGE* image =
AtlGetStringResourceImage(_AtlBaseModule.GetModuleInstance(),
message_id);
@@ -37,7 +37,7 @@ std::wstring GetLocalizedString(int message_id) {
NOTREACHED();
return L"No string for this identifier!";
}
return std::wstring(image->achString, image->nLength);
return string16(image->achString, image->nLength);
}
HCURSOR LoadCursor(int cursor_id) {

View File

@@ -31,11 +31,11 @@
#include "webkit/glue/webkit_glue.h"
#include "webkit/glue/webview.h"
#include "webkit/glue/plugins/plugin_list.h"
#include "webkit/glue/plugins/webplugin_delegate_impl.h"
#include "webkit/glue/window_open_disposition.h"
#if defined(OS_WIN)
// TODO(port): make these files work everywhere.
#include "webkit/glue/plugins/webplugin_delegate_impl.h"
#include "browser_drag_delegate.h"
#include "browser_drop_delegate.h"
#endif
@@ -348,6 +348,11 @@ bool BrowserWebViewDelegate::RunJavaScriptPrompt(WebView* webview,
return retval;
}
void BrowserWebViewDelegate::SetStatusbarText(WebView* webview,
const std::wstring& message) {
}
void BrowserWebViewDelegate::StartDragging(WebView* webview,
const WebDropData& drop_data) {
#if defined(OS_WIN)
@@ -499,37 +504,6 @@ void BrowserWebViewDelegate::Blur(WebWidget* webwidget) {
browser_->UIT_SetFocus(host, false);
}
void BrowserWebViewDelegate::DidMove(WebWidget* webwidget,
const WebPluginGeometry& move) {
#if defined(OS_WIN)
HRGN hrgn = ::CreateRectRgn(move.clip_rect.x(),
move.clip_rect.y(),
move.clip_rect.right(),
move.clip_rect.bottom());
gfx::SubtractRectanglesFromRegion(hrgn, move.cutout_rects);
// Note: System will own the hrgn after we call SetWindowRgn,
// so we don't need to call DeleteObject(hrgn)
::SetWindowRgn(move.window, hrgn, FALSE);
unsigned long flags = 0;
if (move.visible)
flags |= SWP_SHOWWINDOW;
else
flags |= SWP_HIDEWINDOW;
::SetWindowPos(move.window,
NULL,
move.window_rect.x(),
move.window_rect.y(),
move.window_rect.width(),
move.window_rect.height(),
flags);
#endif
}
bool BrowserWebViewDelegate::IsHidden() {
return false;
}

View File

@@ -71,6 +71,8 @@ class BrowserWebViewDelegate : public base::RefCounted<BrowserWebViewDelegate>,
const std::wstring& message,
const std::wstring& default_value,
std::wstring* result);
virtual void SetStatusbarText(WebView* webview,
const std::wstring& message);
virtual void AddMessageToConsole(WebView* webview,
const std::wstring& message,
unsigned int line_no,
@@ -272,7 +274,7 @@ class BrowserWebViewDelegate : public base::RefCounted<BrowserWebViewDelegate>,
GdkCursorType cursor_type_;
#endif
DISALLOW_EVIL_CONSTRUCTORS(BrowserWebViewDelegate);
DISALLOW_COPY_AND_ASSIGN(BrowserWebViewDelegate);
};
#endif // _BROWSER_WEBVIEW_DELEGATE_H

View File

@@ -19,6 +19,8 @@
#include <shlobj.h>
#include <shlwapi.h>
#include "base/gfx/gdi_util.h"
#include "base/gfx/native_widget_types.h"
#include "base/gfx/point.h"
#include "base/message_loop.h"
#include "base/string_util.h"
@@ -130,6 +132,34 @@ void BrowserWebViewDelegate::GetRootWindowResizerRect(WebWidget* webwidget,
*out_rect = gfx::Rect();
}
void BrowserWebViewDelegate::DidMove(WebWidget* webwidget,
const WebPluginGeometry& move) {
HRGN hrgn = ::CreateRectRgn(move.clip_rect.x(),
move.clip_rect.y(),
move.clip_rect.right(),
move.clip_rect.bottom());
gfx::SubtractRectanglesFromRegion(hrgn, move.cutout_rects);
// Note: System will own the hrgn after we call SetWindowRgn,
// so we don't need to call DeleteObject(hrgn)
::SetWindowRgn(move.window, hrgn, FALSE);
unsigned long flags = 0;
if (move.visible)
flags |= SWP_SHOWWINDOW;
else
flags |= SWP_HIDEWINDOW;
::SetWindowPos(move.window,
NULL,
move.window_rect.x(),
move.window_rect.y(),
move.window_rect.width(),
move.window_rect.height(),
flags);
}
void BrowserWebViewDelegate::RunModal(WebWidget* webwidget) {
Show(webwidget, NEW_WINDOW);

View File

@@ -46,7 +46,7 @@ WebWidgetHost* WebWidgetHost::Create(HWND parent_view,
}
/*static*/
WebWidgetHost* WebWidgetHost::FromWindow(HWND view) {
static WebWidgetHost* FromWindow(HWND view) {
return reinterpret_cast<WebWidgetHost*>(win_util::GetWindowUserData(view));
}

View File

@@ -27,7 +27,6 @@ class WebWidgetHost {
static WebWidgetHost* Create(gfx::NativeView parent_view,
WebWidgetDelegate* delegate);
static WebWidgetHost* FromWindow(gfx::NativeView view);
#if defined(OS_MACOSX)
static void HandleEvent(gfx::NativeView view, NSEvent *event);
#endif
@@ -83,7 +82,8 @@ class WebWidgetHost {
// parent: a GtkBox to pack the new widget at the end of
// host: a pointer to a WebWidgetHost (or subclass thereof)
// ---------------------------------------------------------------------------
static gfx::NativeView CreateWindow(gfx::NativeView parent_view, void* host);
static gfx::NativeView CreateWindow(gfx::NativeView parent_view,
WebWidgetHost* host);
void WindowDestroyed();
void Resize(const gfx::Size& size);
#endif