From cbb3124475da568b7b0b194d0f469165eccc2542 Mon Sep 17 00:00:00 2001 From: Marshall Greenblatt Date: Thu, 13 Aug 2009 17:23:08 +0000 Subject: [PATCH] libcef: Update due to underlying chromium changes. - Modifications due to WebFrame moving from webkit/glue to webkit/api - Remove the ATL dependency from browser_drag_delegate.cc - Use scoped_refptr instead of scoped_ptr for BrowserWebViewDelegate pointers in CefBrowserImpl. - Allow cancellation of redirects before they're sent in browser_resource_loader_bridge.cc - Enable remote fonts, local storage and session storage in context.cc - Add vsprops files to the libcef project that used to exist in the webkit/build directory git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@34 5089003a-bbd8-11dd-ad1f-f1f9622dbc98 --- CHROMIUM_BUILD_COMPATIBILITY.txt | 1 + libcef/browser_drag_delegate.cc | 30 +-- libcef/browser_impl.cc | 43 +++-- libcef/browser_impl.h | 16 +- libcef/browser_impl_win.cc | 60 +++--- libcef/browser_resource_loader_bridge.cc | 71 +++++-- libcef/browser_webkit_glue.cc | 5 +- libcef/browser_webkit_glue.h | 4 +- libcef/browser_webkit_glue_win.cc | 14 +- libcef/browser_webkit_init.h | 24 ++- libcef/browser_webview_delegate.cc | 231 +++++++++++++---------- libcef/browser_webview_delegate.h | 144 +++++++------- libcef/browser_webview_delegate_win.cc | 5 +- libcef/context.cc | 4 + libcef/libcef_webkit.vsprops | 2 +- libcef/libcef_webkit_defines.vsprops | 11 ++ libcef/libcef_webkit_v8bindings.vsprops | 12 ++ patch/patch.cfg | 3 +- patch/patches/webkit_api.patch | 16 ++ patch/patches/webkit_glue.patch | 42 ++--- 20 files changed, 429 insertions(+), 309 deletions(-) create mode 100644 libcef/libcef_webkit_defines.vsprops create mode 100644 libcef/libcef_webkit_v8bindings.vsprops create mode 100644 patch/patches/webkit_api.patch diff --git a/CHROMIUM_BUILD_COMPATIBILITY.txt b/CHROMIUM_BUILD_COMPATIBILITY.txt index ef96898a7..5e1ca4d4d 100644 --- a/CHROMIUM_BUILD_COMPATIBILITY.txt +++ b/CHROMIUM_BUILD_COMPATIBILITY.txt @@ -33,3 +33,4 @@ Date | CEF Revision | Chromium Revision 2009-05-15 | /trunk@24 | /trunk@16080 2009-06-02 | /trunk@28 | /trunk@17397 2009-07-24 | /trunk@32 | /trunk@21529 +2009-08-13 | /trunk@34 | /trunk@23266 diff --git a/libcef/browser_drag_delegate.cc b/libcef/browser_drag_delegate.cc index b67ecb627..4795b8a32 100644 --- a/libcef/browser_drag_delegate.cc +++ b/libcef/browser_drag_delegate.cc @@ -6,8 +6,6 @@ #include "precompiled_libcef.h" #include "browser_drag_delegate.h" -#include - #include "webkit/api/public/WebPoint.h" #include "webkit/glue/webview.h" @@ -16,14 +14,18 @@ using WebKit::WebPoint; namespace { -void GetCursorPositions(HWND hwnd, CPoint* client, CPoint* screen) { +void GetCursorPositions(HWND hwnd, gfx::Point* client, gfx::Point* screen) { // GetCursorPos will fail if the input desktop isn't the current desktop. // See http://b/1173534. (0,0) is wrong, but better than uninitialized. - if (!GetCursorPos(screen)) - screen->SetPoint(0, 0); + POINT pos; + if (!GetCursorPos(&pos)) { + pos.x = 0; + pos.y = 0; + } - *client = *screen; - ScreenToClient(hwnd, client); + *screen = gfx::Point(pos); + ScreenToClient(hwnd, &pos); + *client = gfx::Point(pos); } } // anonymous namespace @@ -33,17 +35,15 @@ void BrowserDragDelegate::OnDragSourceCancel() { } void BrowserDragDelegate::OnDragSourceDrop() { - CPoint client; - CPoint screen; + gfx::Point client; + gfx::Point screen; GetCursorPositions(source_hwnd_, &client, &screen); - webview_->DragSourceEndedAt(WebPoint(client.x, client.y), - WebPoint(screen.x, screen.y)); + webview_->DragSourceEndedAt(client, screen); } void BrowserDragDelegate::OnDragSourceMove() { - CPoint client; - CPoint screen; + gfx::Point client; + gfx::Point screen; GetCursorPositions(source_hwnd_, &client, &screen); - webview_->DragSourceMovedTo(WebPoint(client.x, client.y), - WebPoint(screen.x, screen.y)); + webview_->DragSourceMovedTo(client, screen); } diff --git a/libcef/browser_impl.cc b/libcef/browser_impl.cc index 95cb420fd..280df8dff 100644 --- a/libcef/browser_impl.cc +++ b/libcef/browser_impl.cc @@ -9,6 +9,7 @@ #include "request_impl.h" #include "base/string_util.h" +#include "webkit/api/public/WebFrame.h" #include "webkit/api/public/WebHTTPBody.h" #include "webkit/api/public/WebScriptSource.h" #include "webkit/api/public/WebString.h" @@ -16,8 +17,8 @@ #include "webkit/api/public/WebURLRequest.h" #include "webkit/glue/glue_serialize.h" #include "webkit/glue/glue_util.h" -#include "webkit/glue/webframe.h" +using WebKit::WebFrame; using WebKit::WebHTTPBody; using WebKit::WebScriptSource; using WebKit::WebString; @@ -33,8 +34,8 @@ CefBrowserImpl::CefBrowserImpl(CefWindowInfo& windowInfo, bool popup, handler_(handler), webviewhost_(NULL), popuphost_(NULL), unique_id_(0), frame_main_(NULL) { - delegate_ = new BrowserWebViewDelegate(this); - popup_delegate_ = new BrowserWebViewDelegate(this); + delegate_.reset(new BrowserWebViewDelegate(this)); + popup_delegate_.reset(new BrowserWebViewDelegate(this)); nav_controller_.reset(new BrowserNavigationController(this)); } @@ -114,7 +115,7 @@ void CefBrowserImpl::GetFrameNames(std::vector& names) WebFrame* it = main_frame; do { if(it != main_frame) - names.push_back(it->GetName()); + names.push_back(UTF16ToWideHack(it->name())); it = view->GetNextFrameAfter(it, true); } while (it != main_frame); } @@ -133,7 +134,7 @@ CefRefPtr CefBrowserImpl::GetCefFrame(WebFrame* frame) cef_frame = frame_main_; } else { // Locate or create the appropriate named reference. - std::wstring name = frame->GetName(); + std::wstring name = UTF16ToWideHack(frame->name()); DCHECK(!name.empty()); FrameMap::const_iterator it = frames_.find(name); if(it != frames_.end()) @@ -289,8 +290,10 @@ void CefBrowserImpl::ExecuteJavaScript(CefRefPtr frame, std::wstring CefBrowserImpl::GetURL(CefRefPtr frame) { WebFrame* web_frame = GetWebFrame(frame); - if(web_frame) - return UTF8ToWide(web_frame->GetURL().spec()); + if(web_frame) { + std::string spec = web_frame->url().spec(); + return UTF8ToWide(spec); + } return std::wstring(); } @@ -421,7 +424,7 @@ void CefBrowserImpl::UIT_LoadHTML(CefFrame* frame, WebFrame* web_frame = GetWebFrame(frame); if(web_frame) - web_frame->LoadHTMLString(WideToUTF8(html), gurl); + web_frame->loadHTMLString(WideToUTF8(html), gurl); frame->Release(); } @@ -456,7 +459,7 @@ void CefBrowserImpl::UIT_LoadHTMLForStreamRef(CefFrame* frame, WebFrame* web_frame = GetWebFrame(frame); if(web_frame) - web_frame->LoadHTMLString(ss.str(), gurl); + web_frame->loadHTMLString(ss.str(), gurl); stream->Release(); frame->Release(); @@ -471,7 +474,7 @@ void CefBrowserImpl::UIT_ExecuteJavaScript(CefFrame* frame, WebFrame* web_frame = GetWebFrame(frame); if(web_frame) { - web_frame->ExecuteScript( + web_frame->executeScript( WebScriptSource(WebString(js_code), WebURL(GURL(script_url)), start_line)); } @@ -516,10 +519,10 @@ bool CefBrowserImpl::UIT_Navigate(const BrowserNavigationEntry& entry, // If we are reloading, then WebKit will use the state of the current page. // Otherwise, we give it the state to navigate to. if (reload) { - frame->Reload(); + frame->reload(); } else if (!entry.GetContentState().empty()) { DCHECK(entry.GetPageID() != -1); - frame->LoadHistoryItem( + frame->loadHistoryItem( webkit_glue::HistoryItemFromString(entry.GetContentState())); } else { DCHECK(entry.GetPageID() == -1); @@ -548,7 +551,7 @@ bool CefBrowserImpl::UIT_Navigate(const BrowserNavigationEntry& entry, request.setHTTPBody(entry.GetUploadData()); } - frame->LoadRequest(request); + frame->loadRequest(request); } // In case LoadRequest failed before DidCreateDataSource was called. @@ -632,31 +635,31 @@ void CefBrowserImpl::UIT_HandleAction(CefHandler::MenuId menuId, break; case MENU_ID_UNDO: if(web_frame) - web_frame->Undo(); + web_frame->executeCommand(WebString::fromUTF8("Undo")); break; case MENU_ID_REDO: if(web_frame) - web_frame->Redo(); + web_frame->executeCommand(WebString::fromUTF8("Redo")); break; case MENU_ID_CUT: if(web_frame) - web_frame->Cut(); + web_frame->executeCommand(WebString::fromUTF8("Cut")); break; case MENU_ID_COPY: if(web_frame) - web_frame->Copy(); + web_frame->executeCommand(WebString::fromUTF8("Copy")); break; case MENU_ID_PASTE: if(web_frame) - web_frame->Paste(); + web_frame->executeCommand(WebString::fromUTF8("Paste")); break; case MENU_ID_DELETE: if(web_frame) - web_frame->Delete(); + web_frame->executeCommand(WebString::fromUTF8("Delete")); break; case MENU_ID_SELECTALL: if(web_frame) - web_frame->SelectAll(); + web_frame->executeCommand(WebString::fromUTF8("SelectAll")); break; case MENU_ID_PRINT: if(web_frame) diff --git a/libcef/browser_impl.h b/libcef/browser_impl.h index 24427e83f..48ecd0926 100644 --- a/libcef/browser_impl.h +++ b/libcef/browser_impl.h @@ -56,12 +56,12 @@ public: // already exist for the specified WebFrame one will be created. There is no // guarantee that the same CefFrame object will be returned across different // calls to this function. - CefRefPtr GetCefFrame(WebFrame* frame); + CefRefPtr GetCefFrame(WebKit::WebFrame* frame); void RemoveCefFrame(const std::wstring& name); // Return the WebFrame object associated with the specified CefFrame. This // may return NULL if no WebFrame with the CefFrame's name exists. - WebFrame* GetWebFrame(CefRefPtr frame); + WebKit::WebFrame* GetWebFrame(CefRefPtr frame); // Frame-related methods void Undo(CefRefPtr frame); @@ -188,7 +188,7 @@ public: // Save the document HTML to a temporary file and open in the default viewing // application - bool UIT_ViewDocumentString(WebFrame *frame); + bool UIT_ViewDocumentString(WebKit::WebFrame *frame); #if defined(OS_WIN) void UIT_GetDocumentStringNotify(CefFrame* frame, CefStreamWriter* writer, HANDLE hEvent); @@ -202,10 +202,10 @@ public: bool UIT_CanGoForward() { return !nav_controller_->IsAtEnd(); } // Printing support - void UIT_PrintPages(WebFrame* frame); + void UIT_PrintPages(WebKit::WebFrame* frame); void UIT_PrintPage(int page_number, int total_pages, - const gfx::Size& canvas_size, WebFrame* frame); - int UIT_GetPagesCount(WebFrame* frame); + const gfx::Size& canvas_size, WebKit::WebFrame* frame); + int UIT_GetPagesCount(WebKit::WebFrame* frame); void UIT_SetUniqueID(int id) { unique_id_ = id; } int UIT_GetUniqueID() { return unique_id_; } @@ -217,8 +217,8 @@ protected: CefRefPtr handler_; scoped_ptr webviewhost_; WebWidgetHost* popuphost_; - scoped_refptr delegate_; - scoped_refptr popup_delegate_; + scoped_ptr delegate_; + scoped_ptr popup_delegate_; scoped_ptr nav_controller_; std::wstring title_; diff --git a/libcef/browser_impl_win.cc b/libcef/browser_impl_win.cc index ed4f6a010..17003d22c 100644 --- a/libcef/browser_impl_win.cc +++ b/libcef/browser_impl_win.cc @@ -14,9 +14,9 @@ #include "base/string_util.h" #include "base/win_util.h" #include "skia/ext/vector_canvas.h" +#include "webkit/api/public/WebFrame.h" #include "webkit/api/public/WebRect.h" #include "webkit/api/public/WebSize.h" -#include "webkit/glue/webframe.h" #include "webkit/glue/webkit_glue.h" #include @@ -56,11 +56,11 @@ LRESULT CALLBACK CefBrowserImpl::WndProc(HWND hwnd, UINT message, // Notify the handler that the window is about to be closed handler->HandleBeforeWindowClose(browser); } - RevokeDragDrop(browser->GetWebViewWndHandle()); + browser->GetWebViewDelegate()->RevokeDragDrop(); // Call GC twice to clean up garbage. - browser->GetWebView()->GetMainFrame()->CallJSGC(); - browser->GetWebView()->GetMainFrame()->CallJSGC(); + browser->GetWebView()->GetMainFrame()->collectGarbage(); + browser->GetWebView()->GetMainFrame()->collectGarbage(); // Clean up anything associated with the WebViewHost widget. browser->GetWebViewHost()->webwidget()->close(); @@ -135,9 +135,11 @@ std::wstring CefBrowserImpl::GetSource(CefRefPtr frame) else { // Retrieve the document string directly - WebFrame* web_frame = GetWebFrame(frame); - if(web_frame) - return UTF8ToWide(web_frame->GetFullPageHtml()); + WebKit::WebFrame* web_frame = GetWebFrame(frame); + if(web_frame) { + std::string markup = web_frame->contentAsMarkup().utf8(); + return UTF8ToWide(markup); + } return std::wstring(); } } @@ -172,7 +174,7 @@ std::wstring CefBrowserImpl::GetText(CefRefPtr frame) else { // Retrieve the document text directly - WebFrame* web_frame = GetWebFrame(frame); + WebKit::WebFrame* web_frame = GetWebFrame(frame); if(web_frame) webkit_glue::DumpDocumentText(web_frame); return std::wstring(); @@ -324,15 +326,15 @@ static void WriteTextToFile(const std::string& data, fclose(fp); } -bool CefBrowserImpl::UIT_ViewDocumentString(WebFrame *frame) +bool CefBrowserImpl::UIT_ViewDocumentString(WebKit::WebFrame *frame) { REQUIRE_UIT(); DWORD dwRetVal; DWORD dwBufSize = 512; TCHAR lpPathBuffer[512]; - UINT uRetVal; - TCHAR szTempName[512]; + UINT uRetVal; + TCHAR szTempName[512]; dwRetVal = GetTempPath(dwBufSize, // length of the buffer lpPathBuffer); // buffer for path @@ -347,9 +349,10 @@ bool CefBrowserImpl::UIT_ViewDocumentString(WebFrame *frame) if (uRetVal == 0) return false; - size_t len = wcslen(szTempName); - wcscpy(szTempName + len - 3, L"txt"); - WriteTextToFile(frame->GetFullPageHtml(), szTempName); + size_t len = wcslen(szTempName); + wcscpy(szTempName + len - 3, L"txt"); + std::string markup = frame->contentAsMarkup().utf8(); + WriteTextToFile(markup, szTempName); int errorCode = (int)ShellExecute(GetMainWndHandle(), L"open", szTempName, NULL, NULL, SW_SHOWNORMAL); @@ -365,12 +368,12 @@ void CefBrowserImpl::UIT_GetDocumentStringNotify(CefFrame* frame, { REQUIRE_UIT(); - WebFrame* web_frame = GetWebFrame(frame); + WebKit::WebFrame* web_frame = GetWebFrame(frame); if(web_frame) { // Retrieve the document string - std::string str = web_frame->GetFullPageHtml(); + std::string markup = web_frame->contentAsMarkup().utf8(); // Write the document string to the stream - writer->Write(str.c_str(), str.size(), 1); + writer->Write(markup.c_str(), markup.size(), 1); } // Notify the calling thread that the data is now available @@ -386,7 +389,7 @@ void CefBrowserImpl::UIT_GetDocumentTextNotify(CefFrame* frame, { REQUIRE_UIT(); - WebFrame* web_frame = GetWebFrame(frame); + WebKit::WebFrame* web_frame = GetWebFrame(frame); if(web_frame) { // Retrieve the document string std::wstring str = webkit_glue::DumpDocumentText(web_frame); @@ -424,7 +427,7 @@ void CefBrowserImpl::UIT_CanGoForwardNotify(bool *retVal, HANDLE hEvent) void CefBrowserImpl::UIT_PrintPage(int page_number, int total_pages, const gfx::Size& canvas_size, - WebFrame* frame) { + WebKit::WebFrame* frame) { #if !CEF_PATCHES_APPLIED NOTREACHED() << "CEF patches must be applied to support printing."; return; @@ -472,14 +475,14 @@ void CefBrowserImpl::UIT_PrintPage(int page_number, int total_pages, // Apply the WebKit scaling factor. float webkit_scale = 0; #if CEF_PATCHES_APPLIED - webkit_scale = frame->GetPrintPageShrink(page_number); + webkit_scale = frame->getPrintPageShrink(page_number); #endif // CEF_PATCHES_APPLIED if (webkit_scale <= 0) { NOTREACHED() << "Printing page " << page_number << " failed."; } canvas.scale(webkit_scale, webkit_scale); - frame->PrintPage(page_number, &canvas); + frame->printPage(page_number, &canvas); res = RestoreDC(hDC, saved_state); DCHECK_NE(res, 0); @@ -503,7 +506,8 @@ void CefBrowserImpl::UIT_PrintPage(int page_number, int total_pages, printInfo.m_Rect = rect; printInfo.m_Scale = scale; - std::wstring url = UTF8ToWide(frame->GetURL().spec()); + std::string spec = frame->url().spec(); + std::wstring url = UTF8ToWide(spec); std::wstring title = title_; std::wstring topLeft, topCenter, topRight; @@ -572,7 +576,7 @@ void CefBrowserImpl::UIT_PrintPage(int page_number, int total_pages, print_context_.PageDone(); } -void CefBrowserImpl::UIT_PrintPages(WebFrame* frame) { +void CefBrowserImpl::UIT_PrintPages(WebKit::WebFrame* frame) { #if !CEF_PATCHES_APPLIED NOTREACHED() << "CEF patches must be applied to support printing."; return; @@ -612,7 +616,7 @@ void CefBrowserImpl::UIT_PrintPages(WebFrame* frame) { settings.page_setup_pixels().physical_size().height(), static_cast(params.dpi), params.desired_dpi)); - page_count = frame->PrintBegin(WebSize(canvas_size)); + page_count = frame->printBegin(WebSize(canvas_size)); if (page_count) { bool old_state = MessageLoop::current()->NestableTasksAllowed(); @@ -635,10 +639,10 @@ void CefBrowserImpl::UIT_PrintPages(WebFrame* frame) { MessageLoop::current()->SetNestableTasksAllowed(old_state); } - frame->PrintEnd(); + frame->printEnd(); } -int CefBrowserImpl::UIT_GetPagesCount(WebFrame* frame) +int CefBrowserImpl::UIT_GetPagesCount(WebKit::WebFrame* frame) { REQUIRE_UIT(); @@ -664,8 +668,8 @@ int CefBrowserImpl::UIT_GetPagesCount(WebFrame* frame) settings.page_setup_pixels().physical_size().height(), static_cast(params.dpi), params.desired_dpi)); - page_count = frame->PrintBegin(WebSize(canvas_size)); - frame->PrintEnd(); + page_count = frame->printBegin(WebSize(canvas_size)); + frame->printEnd(); return page_count; } diff --git a/libcef/browser_resource_loader_bridge.cc b/libcef/browser_resource_loader_bridge.cc index dcac0b94a..61588513c 100644 --- a/libcef/browser_resource_loader_bridge.cc +++ b/libcef/browser_resource_loader_bridge.cc @@ -44,7 +44,6 @@ #include "base/timer.h" #include "base/thread.h" #include "base/waitable_event.h" -#include "net/base/cookie_monster.h" #include "net/base/io_buffer.h" #include "net/base/load_flags.h" #include "net/base/net_errors.h" @@ -54,9 +53,9 @@ #include "net/http/http_util.h" #include "net/proxy/proxy_service.h" #include "net/url_request/url_request.h" +#include "webkit/api/public/WebFrame.h" #include "webkit/glue/resource_loader_bridge.h" #include "webkit/glue/webappcachecontext.h" -#include "webkit/glue/webframe.h" #include "webkit/glue/webview.h" using webkit_glue::ResourceLoaderBridge; @@ -167,9 +166,14 @@ class RequestProxy : public URLRequest::Delegate, peer_->OnUploadProgress(position, size); } - void NotifyReceivedRedirect(const GURL& new_url) { - if (peer_) - peer_->OnReceivedRedirect(new_url); + void NotifyReceivedRedirect(const GURL& new_url, + const ResourceLoaderBridge::ResponseInfo& info) { + if (peer_ && peer_->OnReceivedRedirect(new_url, info)) { + io_thread->message_loop()->PostTask(FROM_HERE, NewRunnableMethod( + this, &RequestProxy::AsyncFollowDeferredRedirect)); + } else { + Cancel(); + } } void NotifyReceivedResponse(const ResourceLoaderBridge::ResponseInfo& info, @@ -268,7 +272,9 @@ class RequestProxy : public URLRequest::Delegate, } else if(!redirectUrl.empty()) { // redirect to the specified URL params->url = GURL(WideToUTF8(redirectUrl)); - OnReceivedRedirect(params->url); + ResourceLoaderBridge::ResponseInfo info; + bool defer_redirect; + OnReceivedRedirect(params->url, info, &defer_redirect); } else if(resourceStream.get()) { // load from the provided resource stream handled = true; @@ -320,6 +326,14 @@ class RequestProxy : public URLRequest::Delegate, Done(); } + void AsyncFollowDeferredRedirect() { + // This can be null in cases where the request is already done. + if (!request_.get()) + return; + + request_->FollowDeferredRedirect(); + } + void AsyncReadData() { if(resource_stream_.get()) { // Read from the handler-provided resource stream @@ -353,9 +367,13 @@ class RequestProxy : public URLRequest::Delegate, // callbacks) that run on the IO thread. They are designed to be overridden // by the SyncRequestProxy subclass. - virtual void OnReceivedRedirect(const GURL& new_url) { + virtual void OnReceivedRedirect( + const GURL& new_url, + const ResourceLoaderBridge::ResponseInfo& info, + bool* defer_redirect) { + *defer_redirect = true; // See AsyncFollowDeferredRedirect owner_loop_->PostTask(FROM_HERE, NewRunnableMethod( - this, &RequestProxy::NotifyReceivedRedirect, new_url)); + this, &RequestProxy::NotifyReceivedRedirect, new_url, info)); } virtual void OnReceivedResponse( @@ -383,18 +401,15 @@ class RequestProxy : public URLRequest::Delegate, const GURL& new_url, bool* defer_redirect) { DCHECK(request->status().is_success()); - OnReceivedRedirect(new_url); + ResourceLoaderBridge::ResponseInfo info; + PopulateResponseInfo(request, &info); + OnReceivedRedirect(new_url, info, defer_redirect); } virtual void OnResponseStarted(URLRequest* request) { if (request->status().is_success()) { ResourceLoaderBridge::ResponseInfo info; - info.request_time = request->request_time(); - info.response_time = request->response_time(); - info.headers = request->response_headers(); - info.app_cache_id = WebAppCacheContext::kNoAppCacheId; - request->GetMimeType(&info.mime_type); - request->GetCharset(&info.charset); + PopulateResponseInfo(request, &info); OnReceivedResponse(info, false); AsyncReadData(); // start reading } else { @@ -466,6 +481,17 @@ class RequestProxy : public URLRequest::Delegate, } } + void PopulateResponseInfo(URLRequest* request, + ResourceLoaderBridge::ResponseInfo* info) const { + info->request_time = request->request_time(); + info->response_time = request->response_time(); + info->headers = request->response_headers(); + info->app_cache_id = WebAppCacheContext::kNoAppCacheId; + request->GetMimeType(&info->mime_type); + request->GetCharset(&info->charset); + info->content_length = request->GetExpectedContentSize(); + } + scoped_ptr request_; CefRefPtr resource_stream_; @@ -509,7 +535,18 @@ class SyncRequestProxy : public RequestProxy { // -------------------------------------------------------------------------- // Event hooks that run on the IO thread: - virtual void OnReceivedRedirect(const GURL& new_url) { + virtual void OnReceivedRedirect( + const GURL& new_url, + const ResourceLoaderBridge::ResponseInfo& 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 + // WebCore/platform/network/cf/ResourceHandleCFNet.cpp :-( + if (new_url.GetOrigin() != result_->url.GetOrigin()) { + DLOG(WARNING) << "Cross origin redirect denied"; + Cancel(); + return; + } result_->url = new_url; } @@ -711,7 +748,7 @@ bool FindProxyForUrl(const GURL& url, std::string* proxy_list) { request_context->proxy_service())); net::ProxyInfo proxy_info; - int rv = sync_proxy_service->ResolveProxy(url, &proxy_info); + int rv = sync_proxy_service->ResolveProxy(NULL, url, &proxy_info); if (rv == net::OK) { *proxy_list = proxy_info.ToPacString(); } diff --git a/libcef/browser_webkit_glue.cc b/libcef/browser_webkit_glue.cc index 9ef3a9c7f..c52dfebaf 100644 --- a/libcef/browser_webkit_glue.cc +++ b/libcef/browser_webkit_glue.cc @@ -23,8 +23,8 @@ MSVC_POP_WARNING(); #include "base/string16.h" #include "base/win_util.h" #include "net/base/mime_util.h" +#include "webkit/api/public/WebFrame.h" #include "webkit/glue/glue_util.h" -#include "webkit/glue/webframe.h" #include "webkit/glue/webkit_glue.h" // Generated by GRIT @@ -134,6 +134,7 @@ StringPiece GetDataResource(int resource_id) { case IDR_MEDIA_PLAY_BUTTON: case IDR_MEDIA_SOUND_FULL_BUTTON: case IDR_MEDIA_SOUND_NONE_BUTTON: + case IDR_MEDIA_SLIDER_THUMB: return NetResourceProvider(resource_id); default: break; @@ -186,7 +187,7 @@ void InitializeTextEncoding() { WebCore::UTF8Encoding(); } -v8::Handle GetV8Context(WebFrame* frame) +v8::Handle GetV8Context(WebKit::WebFrame* frame) { WebFrameImpl* webFrameImpl = static_cast(frame); WebCore::Frame* core_frame = webFrameImpl->frame(); diff --git a/libcef/browser_webkit_glue.h b/libcef/browser_webkit_glue.h index 883b81e51..10958be1d 100644 --- a/libcef/browser_webkit_glue.h +++ b/libcef/browser_webkit_glue.h @@ -10,7 +10,9 @@ #include "base/string_piece.h" #include "v8/include/v8.h" +namespace WebKit { class WebFrame; +} class WebView; namespace webkit_glue { @@ -31,6 +33,6 @@ void InitializeTextEncoding(); StringPiece NetResourceProvider(int key); // Retrieve the V8 context associated with the frame. -v8::Handle GetV8Context(WebFrame* frame); +v8::Handle GetV8Context(WebKit::WebFrame* frame); } // namespace webkit_glue diff --git a/libcef/browser_webkit_glue_win.cc b/libcef/browser_webkit_glue_win.cc index 7b07d13f5..8f7ffc49a 100644 --- a/libcef/browser_webkit_glue_win.cc +++ b/libcef/browser_webkit_glue_win.cc @@ -33,17 +33,17 @@ using WebKit::WebSize; namespace webkit_glue { +#define MAX_LOADSTRING 100 + string16 GetLocalizedString(int message_id) { - // Localized resources are provided via webkit_resources.rc and - // webkit_strings_en-US.rc. - const ATLSTRINGRESOURCEIMAGE* image = - AtlGetStringResourceImage(_AtlBaseModule.GetModuleInstance(), - message_id); - if (!image) { + wchar_t localized[MAX_LOADSTRING]; + int length = LoadString(GetModuleHandle(NULL), message_id, + localized, MAX_LOADSTRING); + if (!length && GetLastError() == ERROR_RESOURCE_NAME_NOT_FOUND) { NOTREACHED(); return L"No string for this identifier!"; } - return string16(image->achString, image->nLength); + return string16(localized, length); } HCURSOR LoadCursor(int cursor_id) { diff --git a/libcef/browser_webkit_init.h b/libcef/browser_webkit_init.h index e0522de10..be938bc1b 100644 --- a/libcef/browser_webkit_init.h +++ b/libcef/browser_webkit_init.h @@ -58,19 +58,21 @@ class BrowserWebKitInit : public webkit_glue::WebKitClientImpl { } WebKit::WebClipboard* clipboard() { - if (!clipboard_.get()) { - clipboard_.reset(new webkit_glue::WebClipboardImpl()); - } - return clipboard_.get(); + return &clipboard_; } virtual WebKit::WebSandboxSupport* sandboxSupport() { return NULL; } - virtual bool getFileSize(const WebKit::WebString& path, long long& result) { + virtual bool sandboxEnabled() { + return false; + } + + virtual bool getFileSize(const WebKit::WebString& path, long long& result) { return file_util::GetFileSize( - FilePath(webkit_glue::WebStringToFilePathString(path)), &result); + FilePath(webkit_glue::WebStringToFilePathString(path)), + reinterpret_cast(&result)); } virtual unsigned long long visitedLinkHash(const char* canonicalURL, size_t length) { @@ -81,17 +83,21 @@ class BrowserWebKitInit : public webkit_glue::WebKitClientImpl { return false; } + virtual WebKit::WebMessagePortChannel* createMessagePortChannel() { + return NULL; + } + virtual void setCookies(const WebKit::WebURL& url, const WebKit::WebURL& first_party_for_cookies, const WebKit::WebString& value) { BrowserResourceLoaderBridge::SetCookie( - url, first_party_for_cookies, UTF16ToUTF8(value)); + url, first_party_for_cookies, value.utf8()); } virtual WebKit::WebString cookies( const WebKit::WebURL& url, const WebKit::WebURL& first_party_for_cookies) { - return UTF8ToUTF16(BrowserResourceLoaderBridge::GetCookies( + return WebKit::WebString::fromUTF8(BrowserResourceLoaderBridge::GetCookies( url, first_party_for_cookies)); } @@ -134,7 +140,7 @@ class BrowserWebKitInit : public webkit_glue::WebKitClientImpl { private: webkit_glue::SimpleWebMimeRegistryImpl mime_registry_; - scoped_ptr clipboard_; + webkit_glue::WebClipboardImpl clipboard_; }; #endif // _BROWSER_WEBKIT_INIT_H diff --git a/libcef/browser_webview_delegate.cc b/libcef/browser_webview_delegate.cc index 0ebf58ce3..96a6dad28 100644 --- a/libcef/browser_webview_delegate.cc +++ b/libcef/browser_webview_delegate.cc @@ -28,6 +28,7 @@ #include "webkit/api/public/WebData.h" #include "webkit/api/public/WebDataSource.h" #include "webkit/api/public/WebDragData.h" +#include "webkit/api/public/WebFrame.h" #include "webkit/api/public/WebHistoryItem.h" #include "webkit/api/public/WebKit.h" #include "webkit/api/public/WebScreenInfo.h" @@ -35,6 +36,7 @@ #include "webkit/api/public/WebURL.h" #include "webkit/api/public/WebURLError.h" #include "webkit/api/public/WebURLRequest.h" +#include "webkit/api/public/WebURLResponse.h" #include "webkit/glue/glue_serialize.h" #include "webkit/glue/glue_util.h" #include "webkit/glue/media/buffered_data_source.h" @@ -42,7 +44,6 @@ #include "webkit/glue/media/simple_data_source.h" #include "webkit/glue/webappcachecontext.h" #include "webkit/glue/webdropdata.h" -#include "webkit/glue/webframe.h" #include "webkit/glue/webpreferences.h" #include "webkit/glue/webkit_glue.h" #include "webkit/glue/webview.h" @@ -70,6 +71,7 @@ using WebKit::WebString; using WebKit::WebURL; using WebKit::WebURLError; using WebKit::WebURLRequest; +using WebKit::WebURLResponse; using WebKit::WebWidget; using WebKit::WebWorker; using WebKit::WebWorkerClient; @@ -159,7 +161,7 @@ void BrowserWebViewDelegate::DidStopLoading(WebView* webview) { } } -void BrowserWebViewDelegate::WindowObjectCleared(WebFrame* webframe) { +void BrowserWebViewDelegate::WindowObjectCleared(WebKit::WebFrame* webframe) { CefRefPtr handler = browser_->GetHandler(); if(handler.get()) { v8::HandleScope handle_scope; @@ -177,7 +179,7 @@ void BrowserWebViewDelegate::WindowObjectCleared(WebFrame* webframe) { WebNavigationPolicy BrowserWebViewDelegate::PolicyForNavigationAction( WebView* webview, - WebFrame* frame, + WebKit::WebFrame* frame, const WebKit::WebURLRequest& request, WebKit::WebNavigationType type, WebNavigationPolicy default_policy, @@ -215,14 +217,6 @@ WebNavigationPolicy BrowserWebViewDelegate::PolicyForNavigationAction( WebNavigationPolicy result; if (policy_delegate_enabled_) { - std::wstring frame_name = frame->GetName(); - std::string url_description; - GURL request_url = request.url(); - if (request_url.SchemeIs("file")) { - url_description = request_url.ExtractFileName(); - } else { - url_description = request_url.spec(); - } if (policy_delegate_is_permissive_) { result = WebKit::WebNavigationPolicyCurrentTab; } else { @@ -234,38 +228,54 @@ WebNavigationPolicy BrowserWebViewDelegate::PolicyForNavigationAction( return result; } -void BrowserWebViewDelegate::AssignIdentifierToRequest(WebView* webview, - uint32 identifier, - const WebURLRequest& request) { +void BrowserWebViewDelegate::AssignIdentifierToRequest( + WebKit::WebFrame* webframe, + uint32 identifier, + const WebURLRequest& request) { } -void BrowserWebViewDelegate::WillSendRequest(WebView* webview, - uint32 identifier, - WebURLRequest* request) { +void BrowserWebViewDelegate::WillSendRequest( + WebKit::WebFrame* webframe, + uint32 identifier, + WebURLRequest* request, + const WebURLResponse& redirect_response) { + if (!redirect_response.isNull() && block_redirects_) { + // To block the request, we set its URL to an empty one. + request->setURL(WebURL()); + return; + } + // 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, - uint32 identifier) { +void BrowserWebViewDelegate::DidReceiveResponse( + WebKit::WebFrame* webframe, + uint32 identifier, + const WebURLResponse& response) { } -void BrowserWebViewDelegate::DidFailLoadingWithError(WebView* webview, - uint32 identifier, - const WebURLError& error) { +void BrowserWebViewDelegate::DidFinishLoading(WebKit::WebFrame* webframe, + uint32 identifier) { } -void BrowserWebViewDelegate::DidCreateDataSource(WebFrame* frame, +void BrowserWebViewDelegate::DidFailLoadingWithError(WebKit::WebFrame* webframe, + uint32 identifier, + const WebURLError& error) { + +} + +void BrowserWebViewDelegate::DidCreateDataSource(WebKit::WebFrame* frame, WebDataSource* ds) { ds->setExtraData(pending_extra_data_.release()); } void BrowserWebViewDelegate::DidStartProvisionalLoadForFrame( WebView* webview, - WebFrame* frame, + WebKit::WebFrame* frame, NavigationGesture gesture) { if (!top_loading_frame_) { top_loading_frame_ = frame; @@ -273,16 +283,16 @@ void BrowserWebViewDelegate::DidStartProvisionalLoadForFrame( UpdateAddressBar(webview); } -void BrowserWebViewDelegate::DidReceiveServerRedirectForProvisionalLoadForFrame( +void BrowserWebViewDelegate::DidReceiveProvisionalLoadServerRedirect( WebView* webview, - WebFrame* frame) { + WebKit::WebFrame* frame) { UpdateAddressBar(webview); } void BrowserWebViewDelegate::DidFailProvisionalLoadWithError( WebView* webview, const WebURLError& error, - WebFrame* frame) { + WebKit::WebFrame* frame) { LocationChangeDone(frame); // error codes are defined in net\base\net_error_list.h @@ -292,7 +302,7 @@ void BrowserWebViewDelegate::DidFailProvisionalLoadWithError( if (error.reason == net::ERR_ABORTED) return; - const WebDataSource* failed_ds = frame->GetProvisionalDataSource(); + const WebDataSource* failed_ds = frame->provisionalDataSource(); BrowserExtraData* extra_data = static_cast(failed_ds->extraData()); bool replace = extra_data && extra_data->pending_page_id != -1; @@ -315,14 +325,14 @@ void BrowserWebViewDelegate::DidFailProvisionalLoadWithError( } // Make sure we never show errors in view source mode. - frame->SetInViewSourceMode(false); + frame->enableViewSourceMode(false); - frame->LoadHTMLString( + frame->loadHTMLString( error_text, GURL("testshell-error:"), error.unreachableURL, replace); } void BrowserWebViewDelegate::DidCommitLoadForFrame(WebView* webview, - WebFrame* frame, + WebKit::WebFrame* frame, bool is_new_navigation) { UpdateForCommittedLoad(frame, is_new_navigation); CefRefPtr handler = browser_->GetHandler(); @@ -334,7 +344,7 @@ void BrowserWebViewDelegate::DidCommitLoadForFrame(WebView* webview, void BrowserWebViewDelegate::DidReceiveTitle(WebView* webview, const std::wstring& title, - WebFrame* frame) { + WebKit::WebFrame* frame) { browser_->UIT_SetTitle(title); CefRefPtr handler = browser_->GetHandler(); if(handler.get()) { @@ -344,7 +354,7 @@ void BrowserWebViewDelegate::DidReceiveTitle(WebView* webview, } void BrowserWebViewDelegate::DidFinishLoadForFrame(WebView* webview, - WebFrame* frame) { + WebKit::WebFrame* frame) { UpdateAddressBar(webview); LocationChangeDone(frame); CefRefPtr handler = browser_->GetHandler(); @@ -356,48 +366,53 @@ void BrowserWebViewDelegate::DidFinishLoadForFrame(WebView* webview, void BrowserWebViewDelegate::DidFailLoadWithError(WebView* webview, const WebURLError& error, - WebFrame* frame) { + WebKit::WebFrame* frame) { LocationChangeDone(frame); } -void BrowserWebViewDelegate::DidFinishDocumentLoadForFrame(WebView* webview, - WebFrame* frame) { +void BrowserWebViewDelegate::DidFinishDocumentLoadForFrame( + WebView* webview, + WebKit::WebFrame* frame) { } -void BrowserWebViewDelegate::DidHandleOnloadEventsForFrame(WebView* webview, - WebFrame* frame) { +void BrowserWebViewDelegate::DidHandleOnloadEventsForFrame( + WebView* webview, + WebKit::WebFrame* frame) { } void BrowserWebViewDelegate::DidChangeLocationWithinPageForFrame( - WebView* webview, WebFrame* frame, bool is_new_navigation) { - frame->GetDataSource()->setExtraData(pending_extra_data_.release()); + WebView* webview, WebKit::WebFrame* frame, bool is_new_navigation) { + frame->dataSource()->setExtraData(pending_extra_data_.release()); UpdateForCommittedLoad(frame, is_new_navigation); } void BrowserWebViewDelegate::DidReceiveIconForFrame(WebView* webview, - WebFrame* frame) { + WebKit::WebFrame* frame) { } -void BrowserWebViewDelegate::WillPerformClientRedirect(WebView* webview, - WebFrame* frame, - const std::wstring& dest_url, - unsigned int delay_seconds, - unsigned int fire_date) { +void BrowserWebViewDelegate::WillPerformClientRedirect( + WebView* webview, + WebKit::WebFrame* frame, + const GURL& src_url, + const GURL& dest_url, + unsigned int delay_seconds, + unsigned int fire_date) { } void BrowserWebViewDelegate::DidCancelClientRedirect(WebView* webview, - WebFrame* frame) { + WebKit::WebFrame* frame) { } -void BrowserWebViewDelegate::AddMessageToConsole(WebView* webview, - const std::wstring& message, - unsigned int line_no, - const std::wstring& source_id) { +void BrowserWebViewDelegate::AddMessageToConsole( + WebView* webview, + const std::wstring& message, + unsigned int line_no, + const std::wstring& source_id) { logging::LogMessage("CONSOLE", 0).stream() << "\"" << message.c_str() << ",\" source: " @@ -407,7 +422,7 @@ void BrowserWebViewDelegate::AddMessageToConsole(WebView* webview, << ")"; } -void BrowserWebViewDelegate::RunJavaScriptAlert(WebFrame* webframe, +void BrowserWebViewDelegate::RunJavaScriptAlert(WebKit::WebFrame* webframe, const std::wstring& message) { CefHandler::RetVal rv = RV_CONTINUE; CefRefPtr handler = browser_->GetHandler(); @@ -419,8 +434,8 @@ void BrowserWebViewDelegate::RunJavaScriptAlert(WebFrame* webframe, ShowJavaScriptAlert(webframe, message); } -bool BrowserWebViewDelegate::RunJavaScriptConfirm(WebFrame* webframe, - const std::wstring& message) { +bool BrowserWebViewDelegate::RunJavaScriptConfirm(WebKit::WebFrame* webframe, + const std::wstring& message) { CefHandler::RetVal rv = RV_CONTINUE; bool retval = false; CefRefPtr handler = browser_->GetHandler(); @@ -433,8 +448,10 @@ bool BrowserWebViewDelegate::RunJavaScriptConfirm(WebFrame* webframe, return retval; } -bool BrowserWebViewDelegate::RunJavaScriptPrompt(WebFrame* webframe, - const std::wstring& message, const std::wstring& default_value, +bool BrowserWebViewDelegate::RunJavaScriptPrompt( + WebKit::WebFrame* webframe, + const std::wstring& message, + const std::wstring& default_value, std::wstring* result) { CefHandler::RetVal rv = RV_CONTINUE; bool retval = false; @@ -454,7 +471,7 @@ void BrowserWebViewDelegate::SetStatusbarText(WebView* webview, } void BrowserWebViewDelegate::StartDragging(WebView* webview, - const WebDragData& drag_data) { + const WebDragData& drag_data) { #if defined(OS_WIN) // TODO(port): make this work on all platforms. if (!drag_delegate_) { @@ -476,45 +493,45 @@ void BrowserWebViewDelegate::StartDragging(WebView* webview, // The output from these methods in non-interactive mode should match that // expected by the layout tests. See EditingDelegate.m in DumpRenderTree. bool BrowserWebViewDelegate::ShouldBeginEditing(WebView* webview, - std::wstring range) { + std::wstring range) { return browser_->UIT_AllowEditing(); } bool BrowserWebViewDelegate::ShouldEndEditing(WebView* webview, - std::wstring range) { + std::wstring range) { return browser_->UIT_AllowEditing(); } bool BrowserWebViewDelegate::ShouldInsertNode(WebView* webview, - std::wstring node, - std::wstring range, - std::wstring action) { + std::wstring node, + std::wstring range, + std::wstring action) { return browser_->UIT_AllowEditing(); } bool BrowserWebViewDelegate::ShouldInsertText(WebView* webview, - std::wstring text, - std::wstring range, - std::wstring action) { + std::wstring text, + std::wstring range, + std::wstring action) { return browser_->UIT_AllowEditing(); } bool BrowserWebViewDelegate::ShouldChangeSelectedRange(WebView* webview, - std::wstring fromRange, - std::wstring toRange, - std::wstring affinity, - bool stillSelecting) { + std::wstring fromRange, + std::wstring toRange, + std::wstring affinity, + bool stillSelecting) { return browser_->UIT_AllowEditing(); } bool BrowserWebViewDelegate::ShouldDeleteRange(WebView* webview, - std::wstring range) { + std::wstring range) { return browser_->UIT_AllowEditing(); } bool BrowserWebViewDelegate::ShouldApplyStyle(WebView* webview, - std::wstring style, - std::wstring range) { + std::wstring style, + std::wstring range) { return browser_->UIT_AllowEditing(); } @@ -599,6 +616,12 @@ void BrowserWebViewDelegate::RegisterDragDrop() { #endif } +void BrowserWebViewDelegate::RevokeDragDrop() { +#if defined(OS_WIN) + ::RevokeDragDrop(browser_->GetWebViewWndHandle()); +#endif +} + void BrowserWebViewDelegate::SetCustomPolicyDelegate(bool is_custom, bool is_permissive) { policy_delegate_enabled_ = is_custom; @@ -642,14 +665,40 @@ WebScreenInfo BrowserWebViewDelegate::screenInfo() { return WebScreenInfo(); } +// Public methods ----------------------------------------------------------- + +BrowserWebViewDelegate::BrowserWebViewDelegate(CefBrowserImpl* browser) + : policy_delegate_enabled_(false), + policy_delegate_is_permissive_(false), + browser_(browser), + top_loading_frame_(NULL), + page_id_(-1), + last_page_id_updated_(-1), + smart_insert_delete_enabled_(true) +#if defined(OS_WIN) + , select_trailing_whitespace_enabled_(true) +#else + , select_trailing_whitespace_enabled_(false) +#endif +#if defined(OS_LINUX) + , cursor_type_(GDK_X_CURSOR) +#endif + , block_redirects_(false) +{ +} + +void BrowserWebViewDelegate::Reset() { + *this = BrowserWebViewDelegate(browser_); +} + // Private methods ----------------------------------------------------------- void BrowserWebViewDelegate::UpdateAddressBar(WebView* webView) { /* - WebFrame* mainFrame = webView->UIT_GetMainFrame(); - WebDataSource* dataSource = mainFrame->GetDataSource(); + WebKit::WebFrame* mainFrame = webView->UIT_GetMainFrame(); + WebDataSource* dataSource = mainFrame->dataSource(); if (!dataSource) - dataSource = mainFrame->GetProvisionalDataSource(); + dataSource = mainFrame->provisionalDataSource(); if (!dataSource) return; @@ -657,7 +706,7 @@ void BrowserWebViewDelegate::UpdateAddressBar(WebView* webView) { */ } -void BrowserWebViewDelegate::LocationChangeDone(WebFrame* frame) { +void BrowserWebViewDelegate::LocationChangeDone(WebKit::WebFrame* frame) { if (frame == top_loading_frame_) top_loading_frame_ = NULL; } @@ -670,13 +719,13 @@ WebWidgetHost* BrowserWebViewDelegate::GetWidgetHost() { return NULL; } -void BrowserWebViewDelegate::UpdateForCommittedLoad(WebFrame* frame, +void BrowserWebViewDelegate::UpdateForCommittedLoad(WebKit::WebFrame* frame, bool is_new_navigation) { WebView* webview = browser_->GetWebView(); // Code duplicated from RenderView::DidCommitLoadForFrame. BrowserExtraData* extra_data = static_cast( - frame->GetDataSource()->extraData()); + frame->dataSource()->extraData()); if (is_new_navigation) { // New navigation. @@ -696,8 +745,8 @@ void BrowserWebViewDelegate::UpdateForCommittedLoad(WebFrame* frame, UpdateURL(frame); } -void BrowserWebViewDelegate::UpdateURL(WebFrame* frame) { - WebDataSource* ds = frame->GetDataSource(); +void BrowserWebViewDelegate::UpdateURL(WebKit::WebFrame* frame) { + WebDataSource* ds = frame->dataSource(); DCHECK(ds); const WebURLRequest& request = ds->request(); @@ -722,7 +771,7 @@ void BrowserWebViewDelegate::UpdateURL(WebFrame* frame) { handler->HandleAddressChange(browser_, browser_->GetCefFrame(frame), url); } - const WebHistoryItem& history_item = frame->GetCurrentHistoryItem(); + const WebHistoryItem& history_item = frame->currentHistoryItem(); if (!history_item.isNull()) entry->SetContentState(webkit_glue::HistoryItemToString(history_item)); @@ -731,7 +780,7 @@ void BrowserWebViewDelegate::UpdateURL(WebFrame* frame) { last_page_id_updated_ = std::max(last_page_id_updated_, page_id_); } -void BrowserWebViewDelegate::UpdateSessionHistory(WebFrame* frame) { +void BrowserWebViewDelegate::UpdateSessionHistory(WebKit::WebFrame* frame) { // If we have a valid page ID at this point, then it corresponds to the page // we are navigating away from. Otherwise, this is the first navigation, so // there is no past session history to record. @@ -744,25 +793,9 @@ void BrowserWebViewDelegate::UpdateSessionHistory(WebFrame* frame) { return; const WebHistoryItem& history_item = - browser_->GetWebView()->GetMainFrame()->GetPreviousHistoryItem(); + browser_->GetWebView()->GetMainFrame()->previousHistoryItem(); if (history_item.isNull()) return; entry->SetContentState(webkit_glue::HistoryItemToString(history_item)); } - -std::wstring BrowserWebViewDelegate::GetFrameDescription(WebFrame* webframe) { - std::wstring name = webframe->GetName(); - - if (webframe == browser_->GetWebView()->GetMainFrame()) { - if (name.length()) - return L"main frame \"" + name + L"\""; - else - return L"main frame"; - } else { - if (name.length()) - return L"frame \"" + name + L"\""; - else - return L"frame (anonymous)"; - } -} diff --git a/libcef/browser_webview_delegate.h b/libcef/browser_webview_delegate.h index d9a9f3a9c..1fbc47877 100644 --- a/libcef/browser_webview_delegate.h +++ b/libcef/browser_webview_delegate.h @@ -19,8 +19,7 @@ #endif #include "base/basictypes.h" -#include "base/ref_counted.h" -#include "base/scoped_ptr.h" +#include "base/linked_ptr.h" #include "webkit/glue/webcursor.h" #include "webkit/glue/webview_delegate.h" #if defined(OS_WIN) @@ -35,29 +34,13 @@ struct WebPreferences; class GURL; class WebWidgetHost; -class BrowserWebViewDelegate : public base::RefCounted, - public WebViewDelegate { +class BrowserWebViewDelegate : public WebViewDelegate { public: - BrowserWebViewDelegate(CefBrowserImpl* browser) - : policy_delegate_enabled_(false), - policy_delegate_is_permissive_(false), - browser_(browser), - top_loading_frame_(NULL), - page_id_(-1), - last_page_id_updated_(-1), - smart_insert_delete_enabled_(true) -#if defined(OS_WIN) - , select_trailing_whitespace_enabled_(true) -#else - , select_trailing_whitespace_enabled_(false) -#endif -#if defined(OS_LINUX) - , cursor_type_(GDK_X_CURSOR) -#endif - { - } + BrowserWebViewDelegate(CefBrowserImpl* browser); virtual ~BrowserWebViewDelegate() {} + void Reset(); + // WebViewDelegate virtual WebView* CreateWebView(WebView* webview, bool user_gesture, @@ -79,11 +62,11 @@ class BrowserWebViewDelegate : public base::RefCounted, const GURL& referrer, WebKit::WebNavigationPolicy policy); virtual void DidMovePlugin(const WebPluginGeometry& move); - virtual void RunJavaScriptAlert(WebFrame* webframe, + virtual void RunJavaScriptAlert(WebKit::WebFrame* webframe, const std::wstring& message); - virtual bool RunJavaScriptConfirm(WebFrame* webframe, + virtual bool RunJavaScriptConfirm(WebKit::WebFrame* webframe, const std::wstring& message); - virtual bool RunJavaScriptPrompt(WebFrame* webframe, + virtual bool RunJavaScriptPrompt(WebKit::WebFrame* webframe, const std::wstring& message, const std::wstring& default_value, std::wstring* result); @@ -109,55 +92,63 @@ class BrowserWebViewDelegate : public base::RefCounted, int edit_flags, const std::string& security_info, const std::string& frame_charset); - virtual void DidCreateDataSource(WebFrame* frame, + virtual void DidCreateDataSource(WebKit::WebFrame* frame, WebKit::WebDataSource* ds); virtual void DidStartProvisionalLoadForFrame( WebView* webview, - WebFrame* frame, + WebKit::WebFrame* frame, NavigationGesture gesture); - virtual void DidReceiveServerRedirectForProvisionalLoadForFrame( - WebView* webview, WebFrame* frame); + virtual void DidReceiveProvisionalLoadServerRedirect( + WebView* webview, WebKit::WebFrame* frame); virtual void DidFailProvisionalLoadWithError( WebView* webview, const WebKit::WebURLError& error, - WebFrame* frame); - virtual void DidCommitLoadForFrame(WebView* webview, WebFrame* frame, - bool is_new_navigation); + WebKit::WebFrame* frame); + virtual void DidCommitLoadForFrame( + WebView* webview, + WebKit::WebFrame* frame, + bool is_new_navigation); virtual void DidReceiveTitle(WebView* webview, const std::wstring& title, - WebFrame* frame); + WebKit::WebFrame* frame); virtual void DidFinishDocumentLoadForFrame(WebView* webview, - WebFrame* frame); + WebKit::WebFrame* frame); virtual void DidHandleOnloadEventsForFrame(WebView* webview, - WebFrame* frame); + WebKit::WebFrame* frame); virtual void DidChangeLocationWithinPageForFrame(WebView* webview, - WebFrame* frame, + WebKit::WebFrame* frame, bool is_new_navigation); - virtual void DidReceiveIconForFrame(WebView* webview, WebFrame* frame); + virtual void DidReceiveIconForFrame(WebView* webview, + WebKit::WebFrame* frame); virtual void WillPerformClientRedirect(WebView* webview, - WebFrame* frame, - const std::wstring& dest_url, + WebKit::WebFrame* frame, + const GURL& src_url, + const GURL& dest_url, unsigned int delay_seconds, unsigned int fire_date); virtual void DidCancelClientRedirect(WebView* webview, - WebFrame* frame); + WebKit::WebFrame* frame); - virtual void DidFinishLoadForFrame(WebView* webview, WebFrame* frame); + virtual void DidFinishLoadForFrame(WebView* webview, WebKit::WebFrame* frame); virtual void DidFailLoadWithError(WebView* webview, const WebKit::WebURLError& error, - WebFrame* for_frame); + WebKit::WebFrame* for_frame); - virtual void AssignIdentifierToRequest(WebView* webview, + virtual void AssignIdentifierToRequest(WebKit::WebFrame* webframe, uint32 identifier, const WebKit::WebURLRequest& request); - virtual void WillSendRequest(WebView* webview, + virtual void WillSendRequest(WebKit::WebFrame* webframe, uint32 identifier, - WebKit::WebURLRequest* request); - virtual void DidFinishLoading(WebView* webview, uint32 identifier); - virtual void DidFailLoadingWithError(WebView* webview, + WebKit::WebURLRequest* request, + const WebKit::WebURLResponse& redirect_response); + virtual void DidFinishLoading(WebKit::WebFrame* webframe, uint32 identifier); + virtual void DidFailLoadingWithError(WebKit::WebFrame* webframe, uint32 identifier, const WebKit::WebURLError& error); + virtual void DidReceiveResponse(WebKit::WebFrame* webframe, + uint32 identifier, + const WebKit::WebURLResponse& response); virtual bool ShouldBeginEditing(WebView* webview, std::wstring range); virtual bool ShouldEndEditing(WebView* webview, std::wstring range); @@ -187,10 +178,10 @@ class BrowserWebViewDelegate : public base::RefCounted, virtual void DidStartLoading(WebView* webview); virtual void DidStopLoading(WebView* webview); - virtual void WindowObjectCleared(WebFrame* webframe); + virtual void WindowObjectCleared(WebKit::WebFrame* webframe); virtual WebKit::WebNavigationPolicy PolicyForNavigationAction( WebView* webview, - WebFrame* frame, + WebKit::WebFrame* frame, const WebKit::WebURLRequest& request, WebKit::WebNavigationType type, WebKit::WebNavigationPolicy default_policy, @@ -220,7 +211,7 @@ class BrowserWebViewDelegate : public base::RefCounted, void SetSelectTrailingWhitespaceEnabled(bool enabled); // Additional accessors - WebFrame* top_loading_frame() { return top_loading_frame_; } + WebKit::WebFrame* top_loading_frame() { return top_loading_frame_; } #if defined(OS_WIN) IDropTarget* drop_delegate() { return drop_delegate_.get(); } IDropSource* drag_delegate() { return drag_delegate_.get(); } @@ -236,10 +227,20 @@ class BrowserWebViewDelegate : public base::RefCounted, // Sets the webview as a drop target. void RegisterDragDrop(); + void RevokeDragDrop(); + + void ResetDragDrop(); void SetCustomPolicyDelegate(bool is_custom, bool is_permissive); void WaitForPolicyDelegate(); + void set_block_redirects(bool block_redirects) { + block_redirects_ = block_redirects; + } + bool block_redirects() const { + return block_redirects_; + } + CefBrowserImpl* GetBrowser() { return browser_; } protected: @@ -247,24 +248,26 @@ class BrowserWebViewDelegate : public base::RefCounted, void UpdateAddressBar(WebView* webView); // Default handling of JavaScript messages. - void ShowJavaScriptAlert(WebFrame* webframe, const std::wstring& message); - bool ShowJavaScriptConfirm(WebFrame* webframe, const std::wstring& message); - bool ShowJavaScriptPrompt(WebFrame* webframe, const std::wstring& message, - const std::wstring& default_value, std::wstring* result); + void ShowJavaScriptAlert(WebKit::WebFrame* webframe, + const std::wstring& message); + bool ShowJavaScriptConfirm(WebKit::WebFrame* webframe, + const std::wstring& message); + bool ShowJavaScriptPrompt(WebKit::WebFrame* webframe, + const std::wstring& message, + const std::wstring& default_value, + std::wstring* result); // In the Mac code, this is called to trigger the end of a test after the // page has finished loading. From here, we can generate the dump for the // test. - void LocationChangeDone(WebFrame*); + void LocationChangeDone(WebKit::WebFrame*); WebWidgetHost* GetWidgetHost(); - void UpdateForCommittedLoad(WebFrame* webframe, bool is_new_navigation); - void UpdateURL(WebFrame* frame); - void UpdateSessionHistory(WebFrame* frame); - - // Get a string suitable for dumping a frame to the console. - std::wstring GetFrameDescription(WebFrame* webframe); + void UpdateForCommittedLoad(WebKit::WebFrame* webframe, + bool is_new_navigation); + void UpdateURL(WebKit::WebFrame* frame); + void UpdateSessionHistory(WebKit::WebFrame* frame); private: // Causes navigation actions just printout the intended navigation instead @@ -280,19 +283,13 @@ class BrowserWebViewDelegate : public base::RefCounted, CefBrowserImpl* browser_; // This is non-NULL IFF a load is in progress. - WebFrame* top_loading_frame_; + WebKit::WebFrame* top_loading_frame_; // For tracking session history. See RenderView. int page_id_; int last_page_id_updated_; - scoped_ptr pending_extra_data_; - - // true if we want to enable smart insert/delete. - bool smart_insert_delete_enabled_; - - // true if we want to enable selection of trailing whitespaces - bool select_trailing_whitespace_enabled_; + linked_ptr pending_extra_data_; WebCursor current_cursor_; #if defined(OS_WIN) @@ -308,7 +305,14 @@ class BrowserWebViewDelegate : public base::RefCounted, GdkCursorType cursor_type_; #endif - DISALLOW_COPY_AND_ASSIGN(BrowserWebViewDelegate); + // true if we want to enable smart insert/delete. + bool smart_insert_delete_enabled_; + + // true if we want to enable selection of trailing whitespaces + bool select_trailing_whitespace_enabled_; + + // true if we should block any redirects + bool block_redirects_; }; #endif // _BROWSER_WEBVIEW_DELEGATE_H diff --git a/libcef/browser_webview_delegate_win.cc b/libcef/browser_webview_delegate_win.cc index 2869d07bd..38da9713e 100644 --- a/libcef/browser_webview_delegate_win.cc +++ b/libcef/browser_webview_delegate_win.cc @@ -27,9 +27,9 @@ #include "base/trace_event.h" #include "net/base/net_errors.h" #include "webkit/api/public/WebCursorInfo.h" +#include "webkit/api/public/WebFrame.h" #include "webkit/api/public/WebRect.h" #include "webkit/glue/webdropdata.h" -#include "webkit/glue/webframe.h" #include "webkit/glue/webpreferences.h" #include "webkit/glue/webplugin.h" #include "webkit/glue/webkit_glue.h" @@ -39,6 +39,7 @@ #include "webkit/glue/window_open_disposition.h" using WebKit::WebCursorInfo; +using WebKit::WebFrame; using WebKit::WebNavigationPolicy; using WebKit::WebRect; @@ -329,7 +330,7 @@ void BrowserWebViewDelegate::runModal() { if (!host) return; - show(WebNavigationPolicy() /*XXX NEW_WINDOW*/); + show(WebKit::WebNavigationPolicyNewWindow); CefContext::BrowserList *list; CefContext::BrowserList::const_iterator i; diff --git a/libcef/context.cc b/libcef/context.cc index c45fb80a8..2e9339cbd 100644 --- a/libcef/context.cc +++ b/libcef/context.cc @@ -347,6 +347,10 @@ bool CefContext::Initialize(bool multi_threaded_message_loop, webprefs_->java_enabled = true; webprefs_->allow_scripts_to_close_windows = false; webprefs_->xss_auditor_enabled = false; + webprefs_->remote_fonts_enabled = true; + webprefs_->local_storage_enabled = true; + webprefs_->session_storage_enabled = true; + webprefs_->application_cache_enabled = false; if (multi_threaded_message_loop) { // Event that will be used to signal thread setup completion. Start diff --git a/libcef/libcef_webkit.vsprops b/libcef/libcef_webkit.vsprops index df683e332..5aba0e688 100644 --- a/libcef/libcef_webkit.vsprops +++ b/libcef/libcef_webkit.vsprops @@ -3,6 +3,6 @@ ProjectType="Visual C++" Version="8.00" Name="webkit_common" - InheritedPropertySheets=".\libcef_webkit_includes.vsprops;$(SolutionDir)..\webkit\build\webkit_common_defines.vsprops;$(SolutionDir)..\webkit\build\js_engine$(JS_ENGINE_TYPE).vsprops;$(SolutionDir)..\third_party\npapi\using_npapi.vsprops;$(SolutionDir)..\skia\using_skia.vsprops;$(SolutionDir)..\build\external_code.vsprops;$(SolutionDir)..\third_party\icu38\build\using_icu.vsprops" + InheritedPropertySheets=".\libcef_webkit_includes.vsprops;.\libcef_webkit_defines.vsprops;.\libcef_webkit_v8bindings.vsprops;$(SolutionDir)..\third_party\npapi\using_npapi.vsprops;$(SolutionDir)..\skia\using_skia.vsprops;$(SolutionDir)..\build\external_code.vsprops;$(SolutionDir)..\third_party\icu38\build\using_icu.vsprops" > diff --git a/libcef/libcef_webkit_defines.vsprops b/libcef/libcef_webkit_defines.vsprops new file mode 100644 index 000000000..0b6d03211 --- /dev/null +++ b/libcef/libcef_webkit_defines.vsprops @@ -0,0 +1,11 @@ + + + + diff --git a/libcef/libcef_webkit_v8bindings.vsprops b/libcef/libcef_webkit_v8bindings.vsprops new file mode 100644 index 000000000..8afbfc94e --- /dev/null +++ b/libcef/libcef_webkit_v8bindings.vsprops @@ -0,0 +1,12 @@ + + + + diff --git a/patch/patch.cfg b/patch/patch.cfg index b72ae0bec..a63159a56 100644 --- a/patch/patch.cfg +++ b/patch/patch.cfg @@ -3,6 +3,7 @@ # file entry should be proceeded by the code review or bug report link that it # relates to. patches = { - # http://codereview.chromium.org/160004 + # http://codereview.chromium.org/164482 + "webkit_api" : "../../webkit/api/", "webkit_glue" : "../../webkit/glue/" } diff --git a/patch/patches/webkit_api.patch b/patch/patches/webkit_api.patch new file mode 100644 index 000000000..f85fb4eb8 --- /dev/null +++ b/patch/patches/webkit_api.patch @@ -0,0 +1,16 @@ +Index: public/WebFrame.h +=================================================================== +--- public/WebFrame.h (revision 23266) ++++ public/WebFrame.h (working copy) +@@ -332,6 +332,11 @@ + // given page size. + virtual int printBegin(const WebSize& pageSize) = 0; + ++ // Returns the page shrinking factor calculated by webkit (usually ++ // between 1/1.25 and 1/2). Returns 0 if the page number is invalid or ++ // not in printing mode. ++ virtual float getPrintPageShrink(int page) = 0; ++ + // Prints one page, and returns the calculated page shrinking factor + // (usually between 1/1.25 and 1/2). Returns 0 if the page number is + // invalid or not in printing mode. diff --git a/patch/patches/webkit_glue.patch b/patch/patches/webkit_glue.patch index 37e18cead..cd8f0aae8 100644 --- a/patch/patches/webkit_glue.patch +++ b/patch/patches/webkit_glue.patch @@ -1,28 +1,12 @@ -Index: webframe.h -=================================================================== ---- webframe.h (revision 21529) -+++ webframe.h (working copy) -@@ -404,6 +404,11 @@ - // size. - virtual int PrintBegin(const WebKit::WebSize& page_size) = 0; - -+ // Returns the page shrinking factor calculated by webkit (usually between -+ // 1/1.25 and 1/2). Returns 0 if the page number is invalid or not in printing -+ // mode. -+ virtual float GetPrintPageShrink(int page) = 0; -+ - // Prints one page, and returns the calculated page shrinking factor (usually - // between 1/1.25 and 1/2). Returns 0 if the page number is invalid or not - // in printing mode. Index: webframe_impl.cc =================================================================== ---- webframe_impl.cc (revision 21529) +--- webframe_impl.cc (revision 23266) +++ webframe_impl.cc (working copy) -@@ -1766,6 +1766,16 @@ +@@ -1045,6 +1045,16 @@ return print_context_->pageCount(); } -+float WebFrameImpl::GetPrintPageShrink(int page) { ++float WebFrameImpl::getPrintPageShrink(int page) { + // Ensure correct state. + if (!print_context_.get() || page < 0) { + NOTREACHED(); @@ -32,18 +16,18 @@ Index: webframe_impl.cc + return print_context_->getPageShrink(page); +} + - float WebFrameImpl::PrintPage(int page, WebCanvas* canvas) { + float WebFrameImpl::printPage(int page, WebCanvas* canvas) { // Ensure correct state. if (!print_context_.get() || page < 0 || !frame() || !frame()->document()) { Index: webframe_impl.h =================================================================== ---- webframe_impl.h (revision 21529) +--- webframe_impl.h (revision 23266) +++ webframe_impl.h (working copy) -@@ -195,6 +195,7 @@ - virtual WebKit::WebSize ScrollOffset() const; - - virtual int PrintBegin(const WebKit::WebSize& page_size); -+ virtual float GetPrintPageShrink(int page); - virtual float PrintPage(int page, WebKit::WebCanvas* canvas); - virtual void PrintEnd(); - +@@ -147,6 +147,7 @@ + virtual WebKit::WebString selectionAsMarkup() const; + virtual int printBegin(const WebKit::WebSize& page_size); + virtual float printPage(int page_to_print, WebKit::WebCanvas* canvas); ++ virtual float getPrintPageShrink(int page); + virtual void printEnd(); + virtual bool find( + int identifier, const WebKit::WebString& search_text,