From 5061db7c1bd4d6258cd54eb0ccabb1c608793ba6 Mon Sep 17 00:00:00 2001 From: Marshall Greenblatt Date: Mon, 14 Jan 2013 21:38:54 +0000 Subject: [PATCH] Update to Chromium revision 173683. git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@982 5089003a-bbd8-11dd-ad1f-f1f9622dbc98 --- cef1/CHROMIUM_BUILD_COMPATIBILITY.txt | 2 +- cef1/LICENSE.txt | 2 +- cef1/cef.gyp | 2 +- cef1/libcef/browser_resource_loader_bridge.cc | 24 +++--- cef1/libcef/request_impl.cc | 78 +++++++++++++++++++ cef1/libcef/request_impl.h | 2 + cef1/patch/patches/spi_webcore_364.patch | 6 +- .../unittests/scheme_handler_unittest.cc | 5 ++ 8 files changed, 105 insertions(+), 16 deletions(-) diff --git a/cef1/CHROMIUM_BUILD_COMPATIBILITY.txt b/cef1/CHROMIUM_BUILD_COMPATIBILITY.txt index 2e8f0d5fa..954538a57 100644 --- a/cef1/CHROMIUM_BUILD_COMPATIBILITY.txt +++ b/cef1/CHROMIUM_BUILD_COMPATIBILITY.txt @@ -17,5 +17,5 @@ { 'chromium_url': 'http://src.chromium.org/svn/trunk/src', - 'chromium_revision': '170167', + 'chromium_revision': '173683', } diff --git a/cef1/LICENSE.txt b/cef1/LICENSE.txt index 7bba13707..a5d84adab 100644 --- a/cef1/LICENSE.txt +++ b/cef1/LICENSE.txt @@ -1,4 +1,4 @@ -// Copyright (c) 2008-2011 Marshall A. Greenblatt. Portions Copyright (c) +// Copyright (c) 2008-2013 Marshall A. Greenblatt. Portions Copyright (c) // 2006-2009 Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without diff --git a/cef1/cef.gyp b/cef1/cef.gyp index 37643086f..79f685cd1 100644 --- a/cef1/cef.gyp +++ b/cef1/cef.gyp @@ -759,7 +759,7 @@ '<(DEPTH)/content/browser/geolocation/device_data_provider.cc', '<(DEPTH)/content/browser/geolocation/empty_device_data_provider.cc', '<(DEPTH)/content/browser/geolocation/geolocation_provider.cc', - '<(DEPTH)/content/browser/geolocation/location_arbitrator.cc', + '<(DEPTH)/content/browser/geolocation/location_arbitrator_impl.cc', '<(DEPTH)/content/browser/geolocation/location_provider.cc', '<(DEPTH)/content/browser/geolocation/network_location_provider.cc', '<(DEPTH)/content/browser/geolocation/network_location_request.cc', diff --git a/cef1/libcef/browser_resource_loader_bridge.cc b/cef1/libcef/browser_resource_loader_bridge.cc index 208ffb1f9..49a07046b 100644 --- a/cef1/libcef/browser_resource_loader_bridge.cc +++ b/cef1/libcef/browser_resource_loader_bridge.cc @@ -453,10 +453,11 @@ class RequestProxy : public net::URLRequest::Delegate, bool handled = false; - scoped_refptr upload_data; + scoped_ptr upload_data_stream; if (params->request_body) { - upload_data = params->request_body->ResolveElementsAndCreateUploadData( - _Context->request_context()->blob_storage_controller()); + upload_data_stream.reset( + params->request_body->ResolveElementsAndCreateUploadDataStream( + _Context->request_context()->blob_storage_controller())); } if (browser_.get()) { @@ -482,10 +483,10 @@ class RequestProxy : public net::URLRequest::Delegate, requestimpl->SetHeaderMap(headerMap); // Transfer post data, if any - if (upload_data.get()) { + if (upload_data_stream) { CefRefPtr postdata(new CefPostDataImpl()); static_cast(postdata.get())->Set( - *upload_data.get()); + *upload_data_stream.get()); requestimpl->SetPostData(postdata); } @@ -526,8 +527,10 @@ class RequestProxy : public net::URLRequest::Delegate, // Observe post data from request. CefRefPtr postData = request->GetPostData(); if (postData.get()) { - upload_data = new net::UploadData(); - static_cast(postData.get())->Get(*upload_data); + upload_data_stream.reset( + static_cast(postData.get())->Get()); + } else { + upload_data_stream.reset(NULL); } } @@ -600,8 +603,8 @@ class RequestProxy : public net::URLRequest::Delegate, headers.AddHeadersFromString(params->headers); request_->SetExtraRequestHeaders(headers); request_->set_load_flags(params->load_flags); - if (upload_data) - request_->set_upload(upload_data); + if (upload_data_stream) + request_->set_upload(upload_data_stream.Pass()); request_->SetUserData(kCefUserData, new ExtraRequestInfo(browser_.get(), params->request_type)); BrowserAppCacheSystem::SetExtraRequestInfo( @@ -1067,7 +1070,8 @@ class ResourceLoaderBridgeImpl : public ResourceLoaderBridge, if (proxy_) { proxy_->DropPeer(); // Let the proxy die on the IO thread - CefThread::ReleaseSoon(CefThread::IO, FROM_HERE, proxy_.release()); + proxy_->AddRef(); + CefThread::ReleaseSoon(CefThread::IO, FROM_HERE, proxy_.get()); } } diff --git a/cef1/libcef/request_impl.cc b/cef1/libcef/request_impl.cc index 4f85acb35..166ed658b 100644 --- a/cef1/libcef/request_impl.cc +++ b/cef1/libcef/request_impl.cc @@ -24,6 +24,52 @@ using WebKit::WebString; using WebKit::WebURL; using WebKit::WebURLRequest; +namespace { + +// A subclass of net::UploadBytesElementReader that keeps the associated +// UploadElement alive until the request completes. +class BytesElementReader : public net::UploadBytesElementReader { + public: + explicit BytesElementReader(scoped_ptr element) + : net::UploadBytesElementReader(element->bytes(), + element->bytes_length()), + element_(element.Pass()) { + DCHECK_EQ(net::UploadElement::TYPE_BYTES, element_->type()); + } + + virtual ~BytesElementReader() {} + + private: + scoped_ptr element_; + + DISALLOW_COPY_AND_ASSIGN(BytesElementReader); +}; + +// A subclass of net::UploadFileElementReader that keeps the associated +// UploadElement alive until the request completes. +class FileElementReader : public net::UploadFileElementReader { + public: + explicit FileElementReader(scoped_ptr element) + : net::UploadFileElementReader( + element->file_path(), + element->file_range_offset(), + element->file_range_length(), + element->expected_file_modification_time()), + element_(element.Pass()) { + DCHECK_EQ(net::UploadElement::TYPE_FILE, element_->type()); + } + + virtual ~FileElementReader() {} + + private: + scoped_ptr element_; + + DISALLOW_COPY_AND_ASSIGN(FileElementReader); +}; + +} // namespace + + CefRefPtr CefRequest::CreateRequest() { CefRefPtr request(new CefRequestImpl()); return request; @@ -340,6 +386,19 @@ void CefPostDataImpl::Get(net::UploadData& data) { data.swap_elements(&data_elements); } +net::UploadDataStream* CefPostDataImpl::Get() { + AutoLock lock_scope(this); + + ScopedVector element_readers; + ElementVector::const_iterator it = elements_.begin(); + for (; it != elements_.end(); ++it) { + element_readers.push_back( + static_cast(it->get())->Get()); + } + + return new net::UploadDataStream(&element_readers, 0); +} + void CefPostDataImpl::Set(const WebKit::WebHTTPBody& data) { AutoLock lock_scope(this); @@ -504,6 +563,25 @@ void CefPostDataElementImpl::Get(net::UploadElement& element) { } } +net::UploadElementReader* CefPostDataElementImpl::Get() { + AutoLock lock_scope(this); + + if (type_ == PDE_TYPE_BYTES) { + net::UploadElement* element = new net::UploadElement(); + element->SetToBytes(static_cast(data_.bytes.bytes), + data_.bytes.size); + return new BytesElementReader(make_scoped_ptr(element)); + } else if (type_ == PDE_TYPE_FILE) { + net::UploadElement* element = new net::UploadElement(); + FilePath path = FilePath(CefString(&data_.filename)); + element->SetToFilePath(path); + return new FileElementReader(make_scoped_ptr(element)); + } else { + NOTREACHED(); + return NULL; + } +} + void CefPostDataElementImpl::Set(const WebKit::WebHTTPBody::Element& element) { AutoLock lock_scope(this); diff --git a/cef1/libcef/request_impl.h b/cef1/libcef/request_impl.h index ab21574a6..f3f430a1f 100644 --- a/cef1/libcef/request_impl.h +++ b/cef1/libcef/request_impl.h @@ -85,6 +85,7 @@ class CefPostDataImpl : public CefPostData { void Set(const net::UploadData& data); void Set(const net::UploadDataStream& data_stream); void Get(net::UploadData& data); + net::UploadDataStream* Get(); void Set(const WebKit::WebHTTPBody& data); void Get(WebKit::WebHTTPBody& data); @@ -114,6 +115,7 @@ class CefPostDataElementImpl : public CefPostDataElement { void Set(const net::UploadElement& element); void Set(const net::UploadElementReader& element_reader); void Get(net::UploadElement& element); + net::UploadElementReader* Get(); void Set(const WebKit::WebHTTPBody::Element& element); void Get(WebKit::WebHTTPBody::Element& element); diff --git a/cef1/patch/patches/spi_webcore_364.patch b/cef1/patch/patches/spi_webcore_364.patch index 3bb72a165..37db45491 100644 --- a/cef1/patch/patches/spi_webcore_364.patch +++ b/cef1/patch/patches/spi_webcore_364.patch @@ -1,8 +1,8 @@ Index: page/FrameView.cpp =================================================================== ---- page/FrameView.cpp (revision 134630) +--- page/FrameView.cpp (revision 137939) +++ page/FrameView.cpp (working copy) -@@ -206,10 +206,12 @@ +@@ -209,10 +209,12 @@ if (!page) return; @@ -17,7 +17,7 @@ Index: page/FrameView.cpp PassRefPtr FrameView::create(Frame* frame) Index: platform/mac/NSScrollerImpDetails.mm =================================================================== ---- platform/mac/NSScrollerImpDetails.mm (revision 134630) +--- platform/mac/NSScrollerImpDetails.mm (revision 137939) +++ platform/mac/NSScrollerImpDetails.mm (working copy) @@ -34,6 +34,7 @@ #if PLATFORM(CHROMIUM) diff --git a/cef1/tests/unittests/scheme_handler_unittest.cc b/cef1/tests/unittests/scheme_handler_unittest.cc index efb193599..e31cfc06b 100644 --- a/cef1/tests/unittests/scheme_handler_unittest.cc +++ b/cef1/tests/unittests/scheme_handler_unittest.cc @@ -103,6 +103,11 @@ class TestSchemeHandler : public TestHandler { return true; } + if (!test_results_->redirect_url.empty() && + newUrl == test_results_->redirect_url) { + EXPECT_TRUE(isRedirect); + } + if (isRedirect) { test_results_->got_redirect.yes(); EXPECT_EQ(newUrl, test_results_->redirect_url);