From 6649a827765d0feb7baf5607aa2500174898a878 Mon Sep 17 00:00:00 2001 From: Aleksei Kuzmin Date: Sun, 17 Dec 2017 23:41:39 +0300 Subject: [PATCH 01/98] Use libcc with Chromium 63 --- vendor/libchromiumcontent | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/libchromiumcontent b/vendor/libchromiumcontent index f0d7c2dc0d4..9867ccf70be 160000 --- a/vendor/libchromiumcontent +++ b/vendor/libchromiumcontent @@ -1 +1 @@ -Subproject commit f0d7c2dc0d44960069a2d8b0a9f7c5722ceeb259 +Subproject commit 9867ccf70be0965d6d8afd9db5ebfcb767874a33 From 5cf1ef7be02e05cfd05d5f15ee2cbc3d65740442 Mon Sep 17 00:00:00 2001 From: Aleksei Kuzmin Date: Sun, 17 Dec 2017 23:45:44 +0300 Subject: [PATCH 02/98] Update clang revision to match Chromium 63.0.3239.70 --- script/update-clang.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/update-clang.sh b/script/update-clang.sh index 292e53244bc..e6110ffe920 100755 --- a/script/update-clang.sh +++ b/script/update-clang.sh @@ -8,7 +8,7 @@ # Do NOT CHANGE this if you don't know what you're doing -- see # https://code.google.com/p/chromium/wiki/UpdatingClang # Reverting problematic clang rolls is safe, though. -CLANG_REVISION=310694 +CLANG_REVISION=313786 # This is incremented when pushing a new build of Clang at the same revision. CLANG_SUB_REVISION=1 From b608152c41f235a0bf4ffd9db21d954bada3ceea Mon Sep 17 00:00:00 2001 From: Aleksei Kuzmin Date: Mon, 18 Dec 2017 00:30:04 +0300 Subject: [PATCH 03/98] Update Chrome version to 63.0.3239.84 --- atom/common/chrome_version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atom/common/chrome_version.h b/atom/common/chrome_version.h index d0ebc901bb3..7e86ba50cd5 100644 --- a/atom/common/chrome_version.h +++ b/atom/common/chrome_version.h @@ -8,7 +8,7 @@ #ifndef ATOM_COMMON_CHROME_VERSION_H_ #define ATOM_COMMON_CHROME_VERSION_H_ -#define CHROME_VERSION_STRING "62.0.3202.94" +#define CHROME_VERSION_STRING "63.0.3239.84" #define CHROME_VERSION "v" CHROME_VERSION_STRING #endif // ATOM_COMMON_CHROME_VERSION_H_ From ed992ae6a1b6274d6f7e625d6e93e0ea0689fb24 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Mon, 18 Dec 2017 10:56:18 +1100 Subject: [PATCH 04/98] trackable_object has moved to base namespace --- atom/app/uv_task_runner.cc | 4 ++-- atom/app/uv_task_runner.h | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/atom/app/uv_task_runner.cc b/atom/app/uv_task_runner.cc index 7ed8b032112..7f998417c03 100644 --- a/atom/app/uv_task_runner.cc +++ b/atom/app/uv_task_runner.cc @@ -20,7 +20,7 @@ UvTaskRunner::~UvTaskRunner() { } } -bool UvTaskRunner::PostDelayedTask(const tracked_objects::Location& from_here, +bool UvTaskRunner::PostDelayedTask(const base::Location& from_here, base::OnceClosure task, base::TimeDelta delay) { auto* timer = new uv_timer_t; @@ -36,7 +36,7 @@ bool UvTaskRunner::RunsTasksInCurrentSequence() const { } bool UvTaskRunner::PostNonNestableDelayedTask( - const tracked_objects::Location& from_here, + const base::Location& from_here, base::OnceClosure task, base::TimeDelta delay) { return PostDelayedTask(from_here, std::move(task), delay); diff --git a/atom/app/uv_task_runner.h b/atom/app/uv_task_runner.h index b7f000d6fd9..660c1dcef6c 100644 --- a/atom/app/uv_task_runner.h +++ b/atom/app/uv_task_runner.h @@ -8,6 +8,7 @@ #include #include "base/callback.h" +#include "base/location.h" #include "base/single_thread_task_runner.h" #include "vendor/node/deps/uv/include/uv.h" @@ -20,12 +21,12 @@ class UvTaskRunner : public base::SingleThreadTaskRunner { ~UvTaskRunner() override; // base::SingleThreadTaskRunner: - bool PostDelayedTask(const tracked_objects::Location& from_here, + bool PostDelayedTask(const base::Location& from_here, base::OnceClosure task, base::TimeDelta delay) override; bool RunsTasksInCurrentSequence() const override; bool PostNonNestableDelayedTask( - const tracked_objects::Location& from_here, + const base::Location& from_here, base::OnceClosure task, base::TimeDelta delay) override; From 461e33104eea9d7914f06b1167bbd7e565bb7518 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Mon, 18 Dec 2017 11:00:20 +1100 Subject: [PATCH 05/98] HandleCommand now takes session_id and returns success boolean. It is assumed a nullptr from the handler means failure --- brightray/browser/devtools_manager_delegate.cc | 8 ++++++-- brightray/browser/devtools_manager_delegate.h | 3 ++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/brightray/browser/devtools_manager_delegate.cc b/brightray/browser/devtools_manager_delegate.cc index daec9b12e8e..0e70af7751b 100644 --- a/brightray/browser/devtools_manager_delegate.cc +++ b/brightray/browser/devtools_manager_delegate.cc @@ -103,10 +103,14 @@ DevToolsManagerDelegate::~DevToolsManagerDelegate() { void DevToolsManagerDelegate::Inspect(content::DevToolsAgentHost* agent_host) { } -base::DictionaryValue* DevToolsManagerDelegate::HandleCommand( +bool DevToolsManagerDelegate::HandleCommand( content::DevToolsAgentHost* agent_host, + int session_id, base::DictionaryValue* command) { - return handler_->HandleCommand(agent_host, command); + if (handler_->HandleCommand(agent_host, command)) { + return true; + } + return false; } scoped_refptr diff --git a/brightray/browser/devtools_manager_delegate.h b/brightray/browser/devtools_manager_delegate.h index f20c32050ee..e8189161c14 100644 --- a/brightray/browser/devtools_manager_delegate.h +++ b/brightray/browser/devtools_manager_delegate.h @@ -24,8 +24,9 @@ class DevToolsManagerDelegate : public content::DevToolsManagerDelegate { // DevToolsManagerDelegate implementation. void Inspect(content::DevToolsAgentHost* agent_host) override; - base::DictionaryValue* HandleCommand( + bool HandleCommand( content::DevToolsAgentHost* agent_host, + int session_id, base::DictionaryValue* command) override; scoped_refptr CreateNewTarget( const GURL& url) override; From 7f50c3d08e8f19359c24728701d1a2e887e89094 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Mon, 18 Dec 2017 11:08:08 +1100 Subject: [PATCH 06/98] TracingController -> Coordinator -- content tracing now uses 'endpoints' instead of 'sinks' --- atom/browser/api/atom_api_content_tracing.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/atom/browser/api/atom_api_content_tracing.cc b/atom/browser/api/atom_api_content_tracing.cc index 50b0c9799b8..299d7173756 100644 --- a/atom/browser/api/atom_api_content_tracing.cc +++ b/atom/browser/api/atom_api_content_tracing.cc @@ -41,13 +41,13 @@ namespace { using CompletionCallback = base::Callback; -scoped_refptr GetTraceDataSink( +scoped_refptr GetTraceDataEndpoint( const base::FilePath& path, const CompletionCallback& callback) { base::FilePath result_file_path = path; if (result_file_path.empty() && !base::CreateTemporaryFile(&result_file_path)) LOG(ERROR) << "Creating temporary file failed"; - return TracingController::CreateFileSink(result_file_path, + return TracingController::CreateFileEndpoint(result_file_path, base::Bind(callback, result_file_path)); } @@ -55,7 +55,7 @@ scoped_refptr GetTraceDataSink( void StopRecording(const base::FilePath& path, const CompletionCallback& callback) { TracingController::GetInstance()->StopTracing( - GetTraceDataSink(path, callback)); + GetTraceDataEndpoint(path, callback)); } void Initialize(v8::Local exports, v8::Local unused, From fb55db665cb9b6f8ad37c632d7ed386fd1cb0510 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Mon, 18 Dec 2017 11:13:03 +1100 Subject: [PATCH 07/98] AllowCertificateError no longer sends overridable --- atom/browser/api/atom_api_app.cc | 1 - atom/browser/api/atom_api_app.h | 1 - atom/browser/atom_browser_client.cc | 3 +-- atom/browser/atom_browser_client.h | 1 - 4 files changed, 1 insertion(+), 5 deletions(-) diff --git a/atom/browser/api/atom_api_app.cc b/atom/browser/api/atom_api_app.cc index 77112113569..4a496ef3f9d 100644 --- a/atom/browser/api/atom_api_app.cc +++ b/atom/browser/api/atom_api_app.cc @@ -702,7 +702,6 @@ void App::AllowCertificateError( const net::SSLInfo& ssl_info, const GURL& request_url, content::ResourceType resource_type, - bool overridable, bool strict_enforcement, bool expired_previous_decision, const base::Callback& diff --git a/atom/browser/api/atom_api_app.h b/atom/browser/api/atom_api_app.h index cf7641c213b..59d1e31c14a 100644 --- a/atom/browser/api/atom_api_app.h +++ b/atom/browser/api/atom_api_app.h @@ -133,7 +133,6 @@ class App : public AtomBrowserClient::Delegate, const net::SSLInfo& ssl_info, const GURL& request_url, content::ResourceType resource_type, - bool overridable, bool strict_enforcement, bool expired_previous_decision, const base::Callback& diff --git a/atom/browser/atom_browser_client.cc b/atom/browser/atom_browser_client.cc index b8a844a6886..437be4aec49 100644 --- a/atom/browser/atom_browser_client.cc +++ b/atom/browser/atom_browser_client.cc @@ -348,7 +348,6 @@ void AtomBrowserClient::AllowCertificateError( const net::SSLInfo& ssl_info, const GURL& request_url, content::ResourceType resource_type, - bool overridable, bool strict_enforcement, bool expired_previous_decision, const base::Callback& @@ -356,7 +355,7 @@ void AtomBrowserClient::AllowCertificateError( if (delegate_) { delegate_->AllowCertificateError( web_contents, cert_error, ssl_info, request_url, - resource_type, overridable, strict_enforcement, + resource_type, strict_enforcement, expired_previous_decision, callback); } } diff --git a/atom/browser/atom_browser_client.h b/atom/browser/atom_browser_client.h index 95afc70b583..046641df50c 100644 --- a/atom/browser/atom_browser_client.h +++ b/atom/browser/atom_browser_client.h @@ -69,7 +69,6 @@ class AtomBrowserClient : public brightray::BrowserClient, const net::SSLInfo& ssl_info, const GURL& request_url, content::ResourceType resource_type, - bool overridable, bool strict_enforcement, bool expired_previous_decision, const base::Callback& From 4666879f94a6f3238ed76181460e7306ab09cbfe Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Mon, 18 Dec 2017 11:19:21 +1100 Subject: [PATCH 08/98] WebContentsObserver no longer provides explicit_set, we can calculate it --- atom/browser/api/atom_api_web_contents.cc | 11 +++++++++-- atom/browser/api/atom_api_web_contents.h | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/atom/browser/api/atom_api_web_contents.cc b/atom/browser/api/atom_api_web_contents.cc index 38740abd045..b15a160bd1d 100644 --- a/atom/browser/api/atom_api_web_contents.cc +++ b/atom/browser/api/atom_api_web_contents.cc @@ -893,9 +893,16 @@ void WebContents::DidFinishNavigation( } } -void WebContents::TitleWasSet(content::NavigationEntry* entry, - bool explicit_set) { +void WebContents::TitleWasSet(content::NavigationEntry* entry) { auto title = entry ? entry->GetTitle() : base::string16(); + bool explicit_set; + if (entry && entry->GetURL().SchemeIsFile() && title.empty()) { + final_title = base::UTF8ToUTF16(entry->GetURL().ExtractFileName()); + explicit_set = false; + } else { + base::TrimWhitespace(title, base::TRIM_ALL, &final_title); + explicit_set = true; + } Emit("page-title-updated", title, explicit_set); } diff --git a/atom/browser/api/atom_api_web_contents.h b/atom/browser/api/atom_api_web_contents.h index 5cd71014919..00e4b5a84a1 100644 --- a/atom/browser/api/atom_api_web_contents.h +++ b/atom/browser/api/atom_api_web_contents.h @@ -361,7 +361,7 @@ class WebContents : public mate::TrackableObject, void WebContentsDestroyed() override; void NavigationEntryCommitted( const content::LoadCommittedDetails& load_details) override; - void TitleWasSet(content::NavigationEntry* entry, bool explicit_set) override; + void TitleWasSet(content::NavigationEntry* entry) override; void DidUpdateFaviconURL( const std::vector& urls) override; void PluginCrashed(const base::FilePath& plugin_path, From 12066a60f379098418f628bfd58f52b87a943317 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Mon, 18 Dec 2017 11:23:02 +1100 Subject: [PATCH 09/98] make_scoped_refptr --> WrapRefCounted --- atom/browser/api/atom_api_app.cc | 2 +- atom/browser/api/atom_api_cookies.cc | 8 ++++---- atom/browser/api/atom_api_session.cc | 10 +++++----- atom/browser/login_handler.cc | 2 +- atom/browser/net/asar/url_request_asar_job.cc | 2 +- atom/browser/net/atom_url_request.cc | 2 +- atom/browser/net/url_request_stream_job.cc | 2 +- brightray/browser/browser_context.cc | 4 ++-- chromium_src/chrome/browser/printing/print_job.cc | 4 ++-- .../chrome/browser/printing/print_job_manager.cc | 4 ++-- .../chrome/browser/printing/print_job_worker.cc | 12 ++++++------ 11 files changed, 26 insertions(+), 26 deletions(-) diff --git a/atom/browser/api/atom_api_app.cc b/atom/browser/api/atom_api_app.cc index 4a496ef3f9d..87cc591736f 100644 --- a/atom/browser/api/atom_api_app.cc +++ b/atom/browser/api/atom_api_app.cc @@ -659,7 +659,7 @@ void App::OnLogin(LoginHandler* login_handler, request_details, login_handler->auth_info(), base::Bind(&PassLoginInformation, - make_scoped_refptr(login_handler))); + WrapRefCounted(login_handler))); } // Default behavior is to always cancel the auth. diff --git a/atom/browser/api/atom_api_cookies.cc b/atom/browser/api/atom_api_cookies.cc index b0ecbea4fef..c83c10a1462 100644 --- a/atom/browser/api/atom_api_cookies.cc +++ b/atom/browser/api/atom_api_cookies.cc @@ -250,7 +250,7 @@ Cookies::~Cookies() {} void Cookies::Get(const base::DictionaryValue& filter, const GetCallback& callback) { std::unique_ptr copied(filter.CreateDeepCopy()); - auto getter = make_scoped_refptr(request_context_getter_); + auto getter = WrapRefCounted(request_context_getter_); content::BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, base::Bind(GetCookiesOnIO, getter, Passed(&copied), callback)); @@ -258,7 +258,7 @@ void Cookies::Get(const base::DictionaryValue& filter, void Cookies::Remove(const GURL& url, const std::string& name, const base::Closure& callback) { - auto getter = make_scoped_refptr(request_context_getter_); + auto getter = WrapRefCounted(request_context_getter_); content::BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, base::Bind(RemoveCookieOnIOThread, getter, url, name, callback)); @@ -267,14 +267,14 @@ void Cookies::Remove(const GURL& url, const std::string& name, void Cookies::Set(const base::DictionaryValue& details, const SetCallback& callback) { std::unique_ptr copied(details.CreateDeepCopy()); - auto getter = make_scoped_refptr(request_context_getter_); + auto getter = WrapRefCounted(request_context_getter_); content::BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, base::Bind(SetCookieOnIO, getter, Passed(&copied), callback)); } void Cookies::FlushStore(const base::Closure& callback) { - auto getter = make_scoped_refptr(request_context_getter_); + auto getter = WrapRefCounted(request_context_getter_); content::BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, base::Bind(FlushCookieStoreOnIOThread, getter, callback)); diff --git a/atom/browser/api/atom_api_session.cc b/atom/browser/api/atom_api_session.cc index 86d4e4bb227..b7b6b2abca6 100644 --- a/atom/browser/api/atom_api_session.cc +++ b/atom/browser/api/atom_api_session.cc @@ -498,7 +498,7 @@ template void Session::DoCacheAction(const net::CompletionCallback& callback) { BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, base::Bind(&DoCacheActionInIO, - make_scoped_refptr(browser_context_->GetRequestContext()), + WrapRefCounted(browser_context_->GetRequestContext()), action, callback)); } @@ -591,7 +591,7 @@ void Session::SetCertVerifyProc(v8::Local val, BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, base::Bind(&SetCertVerifyProcInIO, - make_scoped_refptr(browser_context_->GetRequestContext()), + WrapRefCounted(browser_context_->GetRequestContext()), proc)); } @@ -613,7 +613,7 @@ void Session::ClearHostResolverCache(mate::Arguments* args) { BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, base::Bind(&ClearHostResolverCacheInIO, - make_scoped_refptr(browser_context_->GetRequestContext()), + WrapRefCounted(browser_context_->GetRequestContext()), callback)); } @@ -629,14 +629,14 @@ void Session::ClearAuthCache(mate::Arguments* args) { BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, base::Bind(&ClearAuthCacheInIO, - make_scoped_refptr(browser_context_->GetRequestContext()), + WrapRefCounted(browser_context_->GetRequestContext()), options, callback)); } void Session::AllowNTLMCredentialsForDomains(const std::string& domains) { BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, base::Bind(&AllowNTLMCredentialsForDomainsInIO, - make_scoped_refptr(browser_context_->GetRequestContext()), + WrapRefCounted(browser_context_->GetRequestContext()), domains)); } diff --git a/atom/browser/login_handler.cc b/atom/browser/login_handler.cc index 827154b0d0b..8eef00756de 100644 --- a/atom/browser/login_handler.cc +++ b/atom/browser/login_handler.cc @@ -49,7 +49,7 @@ LoginHandler::LoginHandler(net::AuthChallengeInfo* auth_info, BrowserThread::UI, FROM_HERE, base::Bind(&Browser::RequestLogin, base::Unretained(Browser::Get()), - base::RetainedRef(make_scoped_refptr(this)), + base::RetainedRef(WrapRefCounted(this)), base::Passed(&request_details))); } diff --git a/atom/browser/net/asar/url_request_asar_job.cc b/atom/browser/net/asar/url_request_asar_job.cc index a6fe5e26540..ebbc65ec8d8 100644 --- a/atom/browser/net/asar/url_request_asar_job.cc +++ b/atom/browser/net/asar/url_request_asar_job.cc @@ -144,7 +144,7 @@ int URLRequestAsarJob::ReadRawData(net::IOBuffer* dest, int dest_size) { dest_size, base::Bind(&URLRequestAsarJob::DidRead, weak_ptr_factory_.GetWeakPtr(), - make_scoped_refptr(dest))); + WrapRefCounted(dest))); if (rv >= 0) { remaining_bytes_ -= rv; DCHECK_GE(remaining_bytes_, 0); diff --git a/atom/browser/net/atom_url_request.cc b/atom/browser/net/atom_url_request.cc index 1f0bdae4c08..b524bf76971 100644 --- a/atom/browser/net/atom_url_request.cc +++ b/atom/browser/net/atom_url_request.cc @@ -444,7 +444,7 @@ bool AtomURLRequest::CopyAndPostBuffer(int bytes_read) { // data is only a wrapper for the asynchronous response_read_buffer_. // Make a deep copy of payload and transfer ownership to the UI thread. - auto buffer_copy = make_scoped_refptr(new net::IOBufferWithSize(bytes_read)); + auto buffer_copy = WrapRefCounted(new net::IOBufferWithSize(bytes_read)); memcpy(buffer_copy->data(), response_read_buffer_->data(), bytes_read); return content::BrowserThread::PostTask( diff --git a/atom/browser/net/url_request_stream_job.cc b/atom/browser/net/url_request_stream_job.cc index 99e4e74cd77..9fdc4507b90 100644 --- a/atom/browser/net/url_request_stream_job.cc +++ b/atom/browser/net/url_request_stream_job.cc @@ -119,7 +119,7 @@ int URLRequestStreamJob::ReadRawData(net::IOBuffer* dest, int dest_size) { content::BrowserThread::PostTask( content::BrowserThread::UI, FROM_HERE, base::Bind(&URLRequestStreamJob::CopyMoreData, weak_factory_.GetWeakPtr(), - make_scoped_refptr(dest), dest_size)); + WrapRefCounted(dest), dest_size)); return net::ERR_IO_PENDING; } diff --git a/brightray/browser/browser_context.cc b/brightray/browser/browser_context.cc index 43dc5142ed2..79aebcb139f 100644 --- a/brightray/browser/browser_context.cc +++ b/brightray/browser/browser_context.cc @@ -65,7 +65,7 @@ scoped_refptr BrowserContext::Get( const std::string& partition, bool in_memory) { PartitionKey key(partition, in_memory); if (browser_context_map_[key].get()) - return make_scoped_refptr(browser_context_map_[key].get()); + return WrapRefCounted(browser_context_map_[key].get()); return nullptr; } @@ -108,7 +108,7 @@ void BrowserContext::InitPrefs() { pref_store->ReadPrefs(); // Synchronous. prefs_factory.set_user_prefs(pref_store); - auto registry = make_scoped_refptr(new PrefRegistrySimple); + auto registry = WrapRefCounted(new PrefRegistrySimple); RegisterInternalPrefs(registry.get()); RegisterPrefs(registry.get()); diff --git a/chromium_src/chrome/browser/printing/print_job.cc b/chromium_src/chrome/browser/printing/print_job.cc index ccc6ac9bed1..1c07453c7d9 100644 --- a/chromium_src/chrome/browser/printing/print_job.cc +++ b/chromium_src/chrome/browser/printing/print_job.cc @@ -126,7 +126,7 @@ void PrintJob::StartPrinting() { // Real work is done in PrintJobWorker::StartPrinting(). worker_->PostTask(FROM_HERE, - base::Bind(&HoldRefCallback, make_scoped_refptr(this), + base::Bind(&HoldRefCallback, WrapRefCounted(this), base::Bind(&PrintJobWorker::StartPrinting, base::Unretained(worker_.get()), base::RetainedRef(document_)))); @@ -349,7 +349,7 @@ void PrintJob::UpdatePrintedDocument(PrintedDocument* new_document) { DCHECK(!is_job_pending_); // Sync the document with the worker. worker_->PostTask(FROM_HERE, - base::Bind(&HoldRefCallback, make_scoped_refptr(this), + base::Bind(&HoldRefCallback, WrapRefCounted(this), base::Bind(&PrintJobWorker::OnDocumentChanged, base::Unretained(worker_.get()), base::RetainedRef(document_)))); diff --git a/chromium_src/chrome/browser/printing/print_job_manager.cc b/chromium_src/chrome/browser/printing/print_job_manager.cc index 96d10d2a9fa..aa999e1d3cd 100644 --- a/chromium_src/chrome/browser/printing/print_job_manager.cc +++ b/chromium_src/chrome/browser/printing/print_job_manager.cc @@ -25,7 +25,7 @@ PrintQueriesQueue::~PrintQueriesQueue() { void PrintQueriesQueue::QueuePrinterQuery(PrinterQuery* job) { base::AutoLock lock(lock_); DCHECK(job); - queued_queries_.push_back(make_scoped_refptr(job)); + queued_queries_.push_back(WrapRefCounted(job)); DCHECK(job->is_valid()); } @@ -47,7 +47,7 @@ scoped_refptr PrintQueriesQueue::PopPrinterQuery( scoped_refptr PrintQueriesQueue::CreatePrinterQuery( int render_process_id, int render_frame_id) { - return make_scoped_refptr( + return WrapRefCounted( new PrinterQuery(render_process_id, render_frame_id)); } diff --git a/chromium_src/chrome/browser/printing/print_job_worker.cc b/chromium_src/chrome/browser/printing/print_job_worker.cc index 419f93f3823..5d13994134b 100644 --- a/chromium_src/chrome/browser/printing/print_job_worker.cc +++ b/chromium_src/chrome/browser/printing/print_job_worker.cc @@ -242,7 +242,7 @@ void PrintJobWorker::GetSettings(bool ask_user_for_settings, if (ask_user_for_settings) { BrowserThread::PostTask( BrowserThread::UI, FROM_HERE, - base::Bind(&HoldRefCallback, make_scoped_refptr(owner_), + base::Bind(&HoldRefCallback, WrapRefCounted(owner_), base::Bind(&PrintJobWorker::GetSettingsWithUI, base::Unretained(this), document_page_count, @@ -251,14 +251,14 @@ void PrintJobWorker::GetSettings(bool ask_user_for_settings, } else if (!device_name.empty()) { BrowserThread::PostTask( BrowserThread::UI, FROM_HERE, - base::Bind(&HoldRefCallback, make_scoped_refptr(owner_), + base::Bind(&HoldRefCallback, WrapRefCounted(owner_), base::Bind(&PrintJobWorker::InitWithDeviceName, base::Unretained(this), device_name))); } else { BrowserThread::PostTask( BrowserThread::UI, FROM_HERE, - base::Bind(&HoldRefCallback, make_scoped_refptr(owner_), + base::Bind(&HoldRefCallback, WrapRefCounted(owner_), base::Bind(&PrintJobWorker::UseDefaultSettings, base::Unretained(this)))); } @@ -272,7 +272,7 @@ void PrintJobWorker::SetSettings( BrowserThread::UI, FROM_HERE, base::Bind(&HoldRefCallback, - make_scoped_refptr(owner_), + WrapRefCounted(owner_), base::Bind(&PrintJobWorker::UpdatePrintSettings, base::Unretained(this), base::Passed(&new_settings)))); @@ -299,7 +299,7 @@ void PrintJobWorker::GetSettingsDone(PrintingContext::Result result) { // PrintJob will create the new PrintedDocument. owner_->PostTask(FROM_HERE, base::Bind(&PrintJobWorkerOwner::GetSettingsDone, - make_scoped_refptr(owner_), + WrapRefCounted(owner_), printing_context_->settings(), result)); } @@ -313,7 +313,7 @@ void PrintJobWorker::GetSettingsWithUI( // weak_factory_ creates pointers valid only on owner_ thread. printing_context_->AskUserForSettings( document_page_count, has_selection, is_scripted, - base::Bind(&PostOnOwnerThread, make_scoped_refptr(owner_), + base::Bind(&PostOnOwnerThread, WrapRefCounted(owner_), base::Bind(&PrintJobWorker::GetSettingsDone, weak_factory_.GetWeakPtr()))); } From f0ef11b85659eb913b5b4f8ad436c05632c1b6a9 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Mon, 18 Dec 2017 11:46:57 +1100 Subject: [PATCH 10/98] BlockingPool has been removed --- brightray/browser/url_request_context_getter.cc | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/brightray/browser/url_request_context_getter.cc b/brightray/browser/url_request_context_getter.cc index 6d9f8a2dab6..f3c19ceac3d 100644 --- a/brightray/browser/url_request_context_getter.cc +++ b/brightray/browser/url_request_context_getter.cc @@ -10,8 +10,8 @@ #include "base/memory/ptr_util.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" +#include "base/task_scheduler/post_task.h" #include "base/threading/sequenced_worker_pool.h" -#include "base/threading/worker_pool.h" #include "brightray/browser/browser_client.h" #include "brightray/browser/net/devtools_network_controller_handle.h" #include "brightray/browser/net/devtools_network_transaction_factory.h" @@ -75,13 +75,14 @@ URLRequestContextGetter::Delegate::CreateURLRequestJobFactory( } protocol_handlers->clear(); + auto runner = base::CreateSequencedTaskRunnerWithTraits( + {base::MayBlock(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}); + job_factory->SetProtocolHandler( url::kDataScheme, base::WrapUnique(new net::DataProtocolHandler)); job_factory->SetProtocolHandler( url::kFileScheme, - base::WrapUnique(new net::FileProtocolHandler( - BrowserThread::GetBlockingPool()->GetTaskRunnerWithShutdownBehavior( - base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)))); + base::WrapUnique(new net::FileProtocolHandler(runner))); return std::move(job_factory); } From f2edd5d06800e6a775094d5cc39bdf567b0b1c3e Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Mon, 18 Dec 2017 11:47:25 +1100 Subject: [PATCH 11/98] v8 proxy service has been removed --- brightray/browser/url_request_context_getter.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/brightray/browser/url_request_context_getter.cc b/brightray/browser/url_request_context_getter.cc index f3c19ceac3d..a64086a127d 100644 --- a/brightray/browser/url_request_context_getter.cc +++ b/brightray/browser/url_request_context_getter.cc @@ -40,7 +40,6 @@ #include "net/proxy/proxy_config_service.h" #include "net/proxy/proxy_script_fetcher_impl.h" #include "net/proxy/proxy_service.h" -#include "net/proxy/proxy_service_v8.h" #include "net/ssl/channel_id_service.h" #include "net/ssl/default_channel_id_store.h" #include "net/ssl/ssl_config_service_defaults.h" @@ -249,7 +248,7 @@ net::URLRequestContext* URLRequestContextGetter::GetURLRequestContext() { proxy_config)); } else { storage_->set_proxy_service( - net::CreateProxyServiceUsingV8ProxyResolver( + net::CreateUsingSystemProxyResolver( std::move(proxy_config_service_), new net::ProxyScriptFetcherImpl(url_request_context_.get()), dhcp_factory.Create(url_request_context_.get()), From 6f695b93d5c287088dae96d7e72766acce1343a2 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Mon, 18 Dec 2017 11:53:09 +1100 Subject: [PATCH 12/98] Fix system proxy config resolver constructor --- brightray/browser/url_request_context_getter.cc | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/brightray/browser/url_request_context_getter.cc b/brightray/browser/url_request_context_getter.cc index a64086a127d..469a8a7d924 100644 --- a/brightray/browser/url_request_context_getter.cc +++ b/brightray/browser/url_request_context_getter.cc @@ -250,11 +250,7 @@ net::URLRequestContext* URLRequestContextGetter::GetURLRequestContext() { storage_->set_proxy_service( net::CreateUsingSystemProxyResolver( std::move(proxy_config_service_), - new net::ProxyScriptFetcherImpl(url_request_context_.get()), - dhcp_factory.Create(url_request_context_.get()), - host_resolver.get(), - nullptr, - url_request_context_->network_delegate())); + net_log_)); } std::vector schemes; From 41b9825f00694beb58ac40203e968636d154af0d Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Mon, 18 Dec 2017 12:00:33 +1100 Subject: [PATCH 13/98] WebContents are no longer IPC Sender's --- atom/browser/api/event.cc | 8 +++++--- atom/common/api/remote_callback_freer.cc | 10 +++++----- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/atom/browser/api/event.cc b/atom/browser/api/event.cc index 1ee0d57e360..673576c6d61 100644 --- a/atom/browser/api/event.cc +++ b/atom/browser/api/event.cc @@ -6,7 +6,7 @@ #include "atom/common/api/api_messages.h" #include "atom/common/native_mate_converters/string16_converter.h" -#include "content/public/browser/render_frame_host.h" +#include "content/public/browser/render_view_host.h" #include "content/public/browser/web_contents.h" #include "native_mate/object_template_builder.h" @@ -60,8 +60,10 @@ bool Event::SendReply(const base::string16& json) { if (message_ == nullptr || sender_ == nullptr) return false; - AtomFrameHostMsg_Message_Sync::WriteReplyParams(message_, json); - bool success = sender_->Send(message_); + AtomViewHostMsg_Message_Sync::WriteReplyParams(message_, json); + auto host = sender_->GetRenderViewHost(); + if (!host) return false; + bool success = host->Send(message_); message_ = nullptr; sender_ = nullptr; return success; diff --git a/atom/common/api/remote_callback_freer.cc b/atom/common/api/remote_callback_freer.cc index c15d5389a2e..d91891e55f5 100644 --- a/atom/common/api/remote_callback_freer.cc +++ b/atom/common/api/remote_callback_freer.cc @@ -7,7 +7,7 @@ #include "atom/common/api/api_messages.h" #include "base/strings/utf_string_conversions.h" #include "base/values.h" -#include "content/public/browser/render_frame_host.h" +#include "content/public/browser/render_view_host.h" #include "content/public/browser/web_contents.h" namespace atom { @@ -37,10 +37,10 @@ void RemoteCallbackFreer::RunDestructor() { base::ASCIIToUTF16("ELECTRON_RENDERER_RELEASE_CALLBACK"); base::ListValue args; args.AppendInteger(object_id_); - auto frame_host = web_contents()->GetMainFrame(); - if (frame_host) { - frame_host->Send(new AtomFrameMsg_Message(frame_host->GetRoutingID(), false, - channel, args)); + auto host = web_contents()->GetRenderViewHost(); + if (host) { + host->Send(new AtomViewMsg_Message( + host->GetRoutingID(), false, channel, args)); } Observe(nullptr); From de2981a76780da9da8e029ce31ab5e13bb7746fa Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Mon, 18 Dec 2017 12:20:03 +1100 Subject: [PATCH 14/98] Move proxy constructor to ProxyService namespace --- brightray/browser/url_request_context_getter.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/brightray/browser/url_request_context_getter.cc b/brightray/browser/url_request_context_getter.cc index 469a8a7d924..80c2633f32b 100644 --- a/brightray/browser/url_request_context_getter.cc +++ b/brightray/browser/url_request_context_getter.cc @@ -248,7 +248,7 @@ net::URLRequestContext* URLRequestContextGetter::GetURLRequestContext() { proxy_config)); } else { storage_->set_proxy_service( - net::CreateUsingSystemProxyResolver( + net::ProxyService::CreateUsingSystemProxyResolver( std::move(proxy_config_service_), net_log_)); } From ce755483ba175b3d9a98e2ffdde9d810be726c93 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Mon, 18 Dec 2017 12:24:13 +1100 Subject: [PATCH 15/98] DialogClosedCallback are not const references anymore --- atom/browser/atom_javascript_dialog_manager.cc | 4 ++-- atom/browser/atom_javascript_dialog_manager.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/atom/browser/atom_javascript_dialog_manager.cc b/atom/browser/atom_javascript_dialog_manager.cc index 4168be35361..4b22c81fe1f 100644 --- a/atom/browser/atom_javascript_dialog_manager.cc +++ b/atom/browser/atom_javascript_dialog_manager.cc @@ -35,7 +35,7 @@ void AtomJavaScriptDialogManager::RunJavaScriptDialog( JavaScriptDialogType dialog_type, const base::string16& message_text, const base::string16& default_prompt_text, - const DialogClosedCallback& callback, + DialogClosedCallback callback, bool* did_suppress_message) { const std::string origin = origin_url.GetOrigin().spec(); if (origin_counts_[origin] == kUserWantsNoMoreDialogs) { @@ -79,7 +79,7 @@ void AtomJavaScriptDialogManager::RunJavaScriptDialog( void AtomJavaScriptDialogManager::RunBeforeUnloadDialog( content::WebContents* web_contents, bool is_reload, - const DialogClosedCallback& callback) { + DialogClosedCallback callback) { bool default_prevented = api_web_contents_->Emit("will-prevent-unload"); callback.Run(default_prevented, base::string16()); return; diff --git a/atom/browser/atom_javascript_dialog_manager.h b/atom/browser/atom_javascript_dialog_manager.h index 0f5e55403be..dffedd91e67 100644 --- a/atom/browser/atom_javascript_dialog_manager.h +++ b/atom/browser/atom_javascript_dialog_manager.h @@ -27,12 +27,12 @@ class AtomJavaScriptDialogManager : public content::JavaScriptDialogManager { content::JavaScriptDialogType dialog_type, const base::string16& message_text, const base::string16& default_prompt_text, - const DialogClosedCallback& callback, + DialogClosedCallback callback, bool* did_suppress_message) override; void RunBeforeUnloadDialog( content::WebContents* web_contents, bool is_reload, - const DialogClosedCallback& callback) override; + DialogClosedCallback callback) override; void CancelDialogs(content::WebContents* web_contents, bool reset_state) override; From 0291dc8214e8c143f9edcbd063eeaa903e4b66e0 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Mon, 18 Dec 2017 12:31:00 +1100 Subject: [PATCH 16/98] Calling non-const callbacks requires some tricks --- atom/browser/atom_javascript_dialog_manager.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/atom/browser/atom_javascript_dialog_manager.cc b/atom/browser/atom_javascript_dialog_manager.cc index 4b22c81fe1f..7532da27953 100644 --- a/atom/browser/atom_javascript_dialog_manager.cc +++ b/atom/browser/atom_javascript_dialog_manager.cc @@ -44,7 +44,7 @@ void AtomJavaScriptDialogManager::RunJavaScriptDialog( if (dialog_type != JavaScriptDialogType::JAVASCRIPT_DIALOG_TYPE_ALERT && dialog_type != JavaScriptDialogType::JAVASCRIPT_DIALOG_TYPE_CONFIRM) { - callback.Run(false, base::string16()); + std::move(callback).Run(false, base::string16()); return; } @@ -81,7 +81,7 @@ void AtomJavaScriptDialogManager::RunBeforeUnloadDialog( bool is_reload, DialogClosedCallback callback) { bool default_prevented = api_web_contents_->Emit("will-prevent-unload"); - callback.Run(default_prevented, base::string16()); + std::move(callback).Run(default_prevented, base::string16()); return; } @@ -95,9 +95,13 @@ void AtomJavaScriptDialogManager::OnMessageBoxCallback( const std::string& origin, int code, bool checkbox_checked) { +<<<<<<< HEAD if (checkbox_checked) origin_counts_[origin] = kUserWantsNoMoreDialogs; callback.Run(code == 0, base::string16()); +======= + std::move(callback).Run(code == 0, base::string16()); +>>>>>>> Calling non-const callbacks requires some tricks } } // namespace atom From 021e3834188ae7150db8f6247a5e3c2f1eb5fa1a Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Mon, 18 Dec 2017 12:35:51 +1100 Subject: [PATCH 17/98] GetBlockingPool has been removed --- atom/browser/atom_browser_context.cc | 7 ++++--- atom/browser/net/url_request_async_asar_job.cc | 6 +++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/atom/browser/atom_browser_context.cc b/atom/browser/atom_browser_context.cc index bd69d8bc78c..e3fdcd7ddc2 100644 --- a/atom/browser/atom_browser_context.cc +++ b/atom/browser/atom_browser_context.cc @@ -27,8 +27,8 @@ #include "base/path_service.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" +#include "base/task_scheduler/post_task.h" #include "base/threading/sequenced_worker_pool.h" -#include "base/threading/worker_pool.h" #include "chrome/common/chrome_paths.h" #include "chrome/common/pref_names.h" #include "components/prefs/pref_registry_simple.h" @@ -136,8 +136,9 @@ AtomBrowserContext::CreateURLRequestJobFactory( url::kDataScheme, base::WrapUnique(new net::DataProtocolHandler)); job_factory->SetProtocolHandler( url::kFileScheme, base::WrapUnique(new asar::AsarProtocolHandler( - BrowserThread::GetBlockingPool()->GetTaskRunnerWithShutdownBehavior( - base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)))); + base::CreateSequencedTaskRunnerWithTraits( + {base::MayBlock(), + base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})))); job_factory->SetProtocolHandler( url::kHttpScheme, base::WrapUnique(new HttpProtocolHandler(url::kHttpScheme))); diff --git a/atom/browser/net/url_request_async_asar_job.cc b/atom/browser/net/url_request_async_asar_job.cc index 86aa7c55067..b9c6b965717 100644 --- a/atom/browser/net/url_request_async_asar_job.cc +++ b/atom/browser/net/url_request_async_asar_job.cc @@ -7,6 +7,7 @@ #include #include "atom/common/atom_constants.h" +#include "base/task_scheduler/post_task.h" #include "base/threading/sequenced_worker_pool.h" namespace atom { @@ -31,9 +32,8 @@ void URLRequestAsyncAsarJob::StartAsync(std::unique_ptr options) { net::URLRequestStatus::FAILED, net::ERR_NOT_IMPLEMENTED)); } else { asar::URLRequestAsarJob::Initialize( - content::BrowserThread::GetBlockingPool()-> - GetTaskRunnerWithShutdownBehavior( - base::SequencedWorkerPool::SKIP_ON_SHUTDOWN), + base::CreateSequencedTaskRunnerWithTraits( + {base::MayBlock(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}), base::FilePath(file_path)); asar::URLRequestAsarJob::Start(); } From e65815e34c882140bc044b2b676bbc053898f084 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Mon, 18 Dec 2017 12:40:29 +1100 Subject: [PATCH 18/98] Implement GetBackgroundFetchDelegate in brightray::BrowserContext --- brightray/browser/browser_context.cc | 5 +++++ brightray/browser/browser_context.h | 1 + 2 files changed, 6 insertions(+) diff --git a/brightray/browser/browser_context.cc b/brightray/browser/browser_context.cc index 79aebcb139f..83a3833845d 100644 --- a/brightray/browser/browser_context.cc +++ b/brightray/browser/browser_context.cc @@ -199,6 +199,11 @@ content::PermissionManager* BrowserContext::GetPermissionManager() { return permission_manager_.get(); } +content::BackgroundFetchDelegate* +BrowserContext::GetBackgroundFetchDelegate() { + return nullptr; +} + content::BackgroundSyncController* BrowserContext::GetBackgroundSyncController() { return nullptr; diff --git a/brightray/browser/browser_context.h b/brightray/browser/browser_context.h index 6d0348db253..449e8e8f286 100644 --- a/brightray/browser/browser_context.h +++ b/brightray/browser/browser_context.h @@ -54,6 +54,7 @@ class BrowserContext : public base::RefCounted, content::PushMessagingService* GetPushMessagingService() override; content::SSLHostStateDelegate* GetSSLHostStateDelegate() override; content::PermissionManager* GetPermissionManager() override; + content::BackgroundFetchDelegate* GetBackgroundFetchDelegate() override; content::BackgroundSyncController* GetBackgroundSyncController() override; content::BrowsingDataRemoverDelegate* GetBrowsingDataRemoverDelegate() override; From 1158d35021029a7bf6d379ad05e91a1506b9355b Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Mon, 18 Dec 2017 12:47:10 +1100 Subject: [PATCH 19/98] experimental_webgl_enabled is not supported, now use webgl1/2_enabled --- atom/browser/atom_browser_client.cc | 3 ++- atom/browser/web_contents_preferences.cc | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/atom/browser/atom_browser_client.cc b/atom/browser/atom_browser_client.cc index 437be4aec49..4ffaaab5b48 100644 --- a/atom/browser/atom_browser_client.cc +++ b/atom/browser/atom_browser_client.cc @@ -203,7 +203,8 @@ void AtomBrowserClient::OverrideWebkitPrefs( prefs->application_cache_enabled = true; prefs->allow_universal_access_from_file_urls = true; prefs->allow_file_access_from_file_urls = true; - prefs->experimental_webgl_enabled = true; + prefs->webgl1_enabled = true; + prefs->webgl2_enabled = true; prefs->allow_running_insecure_content = false; // Custom preferences of guest page. diff --git a/atom/browser/web_contents_preferences.cc b/atom/browser/web_contents_preferences.cc index 5cd7d931161..0a4d1a5fdbc 100644 --- a/atom/browser/web_contents_preferences.cc +++ b/atom/browser/web_contents_preferences.cc @@ -293,8 +293,10 @@ void WebContentsPreferences::OverrideWebkitPrefs( prefs->images_enabled = b; if (self->web_preferences_.GetBoolean("textAreasAreResizable", &b)) prefs->text_areas_are_resizable = b; - if (self->web_preferences_.GetBoolean("webgl", &b)) - prefs->experimental_webgl_enabled = b; + if (self->web_preferences_.GetBoolean("webgl", &b)) { + prefs->webgl1_enabled = b; + prefs->webgl2_enabled = b; + } if (self->web_preferences_.GetBoolean("webSecurity", &b)) { prefs->web_security_enabled = b; prefs->allow_running_insecure_content = !b; From 6402b23041ffafeaba33c5ad824115bdf8f8bae0 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Mon, 18 Dec 2017 13:35:17 +1100 Subject: [PATCH 20/98] tracked_objects::Location --> base::Location --- atom/browser/bridge_task_runner.cc | 4 ++-- atom/browser/bridge_task_runner.h | 7 ++++--- chromium_src/chrome/browser/printing/print_job_worker.cc | 2 +- chromium_src/chrome/browser/printing/print_job_worker.h | 3 ++- .../chrome/browser/printing/print_job_worker_owner.cc | 2 +- .../chrome/browser/printing/print_job_worker_owner.h | 7 ++----- 6 files changed, 12 insertions(+), 13 deletions(-) diff --git a/atom/browser/bridge_task_runner.cc b/atom/browser/bridge_task_runner.cc index bdde5f3a40c..f0a6206f346 100644 --- a/atom/browser/bridge_task_runner.cc +++ b/atom/browser/bridge_task_runner.cc @@ -22,7 +22,7 @@ void BridgeTaskRunner::MessageLoopIsReady() { } bool BridgeTaskRunner::PostDelayedTask( - const tracked_objects::Location& from_here, + const base::Location& from_here, base::OnceClosure task, base::TimeDelta delay) { auto message_loop = base::MessageLoop::current(); @@ -44,7 +44,7 @@ bool BridgeTaskRunner::RunsTasksInCurrentSequence() const { } bool BridgeTaskRunner::PostNonNestableDelayedTask( - const tracked_objects::Location& from_here, + const base::Location& from_here, base::OnceClosure task, base::TimeDelta delay) { auto message_loop = base::MessageLoop::current(); diff --git a/atom/browser/bridge_task_runner.h b/atom/browser/bridge_task_runner.h index 07dee3e6ce9..cf04daa6f1c 100644 --- a/atom/browser/bridge_task_runner.h +++ b/atom/browser/bridge_task_runner.h @@ -8,6 +8,7 @@ #include #include +#include "base/location.h" #include "base/single_thread_task_runner.h" #include "base/tuple.h" @@ -24,18 +25,18 @@ class BridgeTaskRunner : public base::SingleThreadTaskRunner { void MessageLoopIsReady(); // base::SingleThreadTaskRunner: - bool PostDelayedTask(const tracked_objects::Location& from_here, + bool PostDelayedTask(const base::Location& from_here, base::OnceClosure task, base::TimeDelta delay) override; bool RunsTasksInCurrentSequence() const override; bool PostNonNestableDelayedTask( - const tracked_objects::Location& from_here, + const base::Location& from_here, base::OnceClosure task, base::TimeDelta delay) override; private: using TaskPair = std::tuple< - tracked_objects::Location, base::OnceClosure, base::TimeDelta>; + base::Location, base::OnceClosure, base::TimeDelta>; std::vector tasks_; std::vector non_nestable_tasks_; diff --git a/chromium_src/chrome/browser/printing/print_job_worker.cc b/chromium_src/chrome/browser/printing/print_job_worker.cc index 5d13994134b..a0e3e3ff40f 100644 --- a/chromium_src/chrome/browser/printing/print_job_worker.cc +++ b/chromium_src/chrome/browser/printing/print_job_worker.cc @@ -424,7 +424,7 @@ bool PrintJobWorker::IsRunning() const { return thread_.IsRunning(); } -bool PrintJobWorker::PostTask(const tracked_objects::Location& from_here, +bool PrintJobWorker::PostTask(const base::Location& from_here, const base::Closure& task) { if (task_runner_.get()) return task_runner_->PostTask(from_here, task); diff --git a/chromium_src/chrome/browser/printing/print_job_worker.h b/chromium_src/chrome/browser/printing/print_job_worker.h index 7d146bc34d6..b6b144f9081 100644 --- a/chromium_src/chrome/browser/printing/print_job_worker.h +++ b/chromium_src/chrome/browser/printing/print_job_worker.h @@ -7,6 +7,7 @@ #include +#include "base/location.h" #include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/memory/weak_ptr.h" @@ -76,7 +77,7 @@ class PrintJobWorker { bool IsRunning() const; // Posts the given task to be run. - bool PostTask(const tracked_objects::Location& from_here, + bool PostTask(const base::Location& from_here, const base::Closure& task); // Signals the thread to exit in the near future. diff --git a/chromium_src/chrome/browser/printing/print_job_worker_owner.cc b/chromium_src/chrome/browser/printing/print_job_worker_owner.cc index ea08de23ae4..60b8473f0fb 100644 --- a/chromium_src/chrome/browser/printing/print_job_worker_owner.cc +++ b/chromium_src/chrome/browser/printing/print_job_worker_owner.cc @@ -20,7 +20,7 @@ bool PrintJobWorkerOwner::RunsTasksInCurrentSequence() const { return task_runner_->RunsTasksInCurrentSequence(); } -bool PrintJobWorkerOwner::PostTask(const tracked_objects::Location& from_here, +bool PrintJobWorkerOwner::PostTask(const base::Location& from_here, const base::Closure& task) { return task_runner_->PostTask(from_here, task); } diff --git a/chromium_src/chrome/browser/printing/print_job_worker_owner.h b/chromium_src/chrome/browser/printing/print_job_worker_owner.h index aaa355a0ba1..0e3605ea506 100644 --- a/chromium_src/chrome/browser/printing/print_job_worker_owner.h +++ b/chromium_src/chrome/browser/printing/print_job_worker_owner.h @@ -7,6 +7,7 @@ #include +#include "base/location.h" #include "base/memory/ref_counted.h" #include "printing/printing_context.h" @@ -15,10 +16,6 @@ class MessageLoop; class SequencedTaskRunner; } -namespace tracked_objects { -class Location; -} - namespace printing { class PrintJobWorker; @@ -51,7 +48,7 @@ class PrintJobWorkerOwner bool RunsTasksInCurrentSequence() const; // Posts the given task to be run. - bool PostTask(const tracked_objects::Location& from_here, + bool PostTask(const base::Location& from_here, const base::Closure& task); protected: From c3dec709ab360d4942cb72d557b5a414710b50e1 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Mon, 18 Dec 2017 13:36:07 +1100 Subject: [PATCH 21/98] PrintedPageSource has been removed --- chromium_src/chrome/browser/printing/print_job.cc | 15 +++------------ chromium_src/chrome/browser/printing/print_job.h | 12 ++---------- .../browser/printing/print_view_manager_base.cc | 3 +-- .../browser/printing/print_view_manager_base.h | 4 +--- 4 files changed, 7 insertions(+), 27 deletions(-) diff --git a/chromium_src/chrome/browser/printing/print_job.cc b/chromium_src/chrome/browser/printing/print_job.cc index 1c07453c7d9..ed44cde8e63 100644 --- a/chromium_src/chrome/browser/printing/print_job.cc +++ b/chromium_src/chrome/browser/printing/print_job.cc @@ -45,8 +45,7 @@ void HoldRefCallback(const scoped_refptr& owner, } // namespace PrintJob::PrintJob() - : source_(nullptr), - is_job_pending_(false), + : is_job_pending_(false), is_canceling_(false), quit_factory_(this) { // This is normally a UI message loop, but in unit tests, the message loop is @@ -65,19 +64,17 @@ PrintJob::~PrintJob() { } void PrintJob::Initialize(PrintJobWorkerOwner* job, - PrintedPagesSource* source, + const base::string16& name, int page_count) { - DCHECK(!source_); DCHECK(!worker_); DCHECK(!is_job_pending_); DCHECK(!is_canceling_); DCHECK(!document_.get()); - source_ = source; worker_ = job->DetachWorker(this); settings_ = job->settings(); PrintedDocument* new_doc = - new PrintedDocument(settings_, source_, job->cookie()); + new PrintedDocument(settings_, name, job->cookie()); new_doc->set_page_count(page_count); UpdatePrintedDocument(new_doc); @@ -204,12 +201,6 @@ bool PrintJob::FlushJob(base::TimeDelta timeout) { return true; } -void PrintJob::DisconnectSource() { - source_ = nullptr; - if (document_.get()) - document_->DisconnectSource(); -} - bool PrintJob::is_job_pending() const { return is_job_pending_; } diff --git a/chromium_src/chrome/browser/printing/print_job.h b/chromium_src/chrome/browser/printing/print_job.h index bca518f6fcd..28fc372ffd7 100644 --- a/chromium_src/chrome/browser/printing/print_job.h +++ b/chromium_src/chrome/browser/printing/print_job.h @@ -27,7 +27,6 @@ class PdfToEmfConverter; class PrintJobWorker; class PrintedDocument; class PrintedPage; -class PrintedPagesSource; class PrinterQuery; // Manages the print work for a specific document. Talks to the printer through @@ -45,7 +44,8 @@ class PrintJob : public PrintJobWorkerOwner, // Grabs the ownership of the PrintJobWorker from another job, which is // usually a PrinterQuery. Set the expected page count of the print job. - void Initialize(PrintJobWorkerOwner* job, PrintedPagesSource* source, + void Initialize(PrintJobWorkerOwner* job, + const base::string16& name, int page_count); // content::NotificationObserver implementation. @@ -80,10 +80,6 @@ class PrintJob : public PrintJobWorkerOwner, // our data. bool FlushJob(base::TimeDelta timeout); - // Disconnects the PrintedPage source (PrintedPagesSource). It is done when - // the source is being destroyed. - void DisconnectSource(); - // Returns true if the print job is pending, i.e. between a StartPrinting() // and the end of the spooling. bool is_job_pending() const; @@ -140,10 +136,6 @@ class PrintJob : public PrintJobWorkerOwner, content::NotificationRegistrar registrar_; - // Source that generates the PrintedPage's (i.e. a WebContents). It will be - // set back to NULL if the source is deleted before this object. - PrintedPagesSource* source_; - // All the UI is done in a worker thread because many Win32 print functions // are blocking and enters a message loop without your consent. There is one // worker thread per print job. diff --git a/chromium_src/chrome/browser/printing/print_view_manager_base.cc b/chromium_src/chrome/browser/printing/print_view_manager_base.cc index e3dcbe063ed..85ae2022b7a 100644 --- a/chromium_src/chrome/browser/printing/print_view_manager_base.cc +++ b/chromium_src/chrome/browser/printing/print_view_manager_base.cc @@ -349,7 +349,7 @@ bool PrintViewManagerBase::CreateNewPrintJob(PrintJobWorkerOwner* job) { return false; print_job_ = new PrintJob(); - print_job_->Initialize(job, this, number_pages_); + print_job_->Initialize(job, RenderSourceName(), number_pages_); registrar_.Add(this, chrome::NOTIFICATION_PRINT_JOB_EVENT, content::Source(print_job_.get())); printing_succeeded_ = false; @@ -414,7 +414,6 @@ void PrintViewManagerBase::ReleasePrintJob() { registrar_.Remove(this, chrome::NOTIFICATION_PRINT_JOB_EVENT, content::Source(print_job_.get())); - print_job_->DisconnectSource(); // Don't close the worker thread. print_job_ = NULL; } diff --git a/chromium_src/chrome/browser/printing/print_view_manager_base.h b/chromium_src/chrome/browser/printing/print_view_manager_base.h index 6950feb7660..ff0a1f38fe6 100644 --- a/chromium_src/chrome/browser/printing/print_view_manager_base.h +++ b/chromium_src/chrome/browser/printing/print_view_manager_base.h @@ -15,7 +15,6 @@ #include "content/public/browser/notification_registrar.h" #include "content/public/browser/web_contents_observer.h" #include "content/public/browser/web_contents_user_data.h" -#include "printing/printed_pages_source.h" struct PrintHostMsg_DidPrintPage_Params; @@ -33,7 +32,6 @@ class PrintQueriesQueue; // Base class for managing the print commands for a WebContents. class PrintViewManagerBase : public content::NotificationObserver, - public PrintedPagesSource, public content::WebContentsObserver { public: virtual ~PrintViewManagerBase(); @@ -48,7 +46,7 @@ class PrintViewManagerBase : public content::NotificationObserver, #endif // !DISABLE_BASIC_PRINTING // PrintedPagesSource implementation. - virtual base::string16 RenderSourceName() override; + base::string16 RenderSourceName(); void SetCallback(const base::Callback& cb) { callback = cb; From a8e013dcb6d43677d102adb557f01159d13cd0d3 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Mon, 18 Dec 2017 13:46:23 +1100 Subject: [PATCH 22/98] GetRenderProcessHost() has been removed for OOPI support, should use #include GetMainFrame()->GetProcess() --- atom/browser/api/atom_api_web_contents.cc | 7 ++++--- atom/browser/web_contents_preferences.cc | 2 +- atom/browser/web_contents_zoom_controller.cc | 15 ++++++++++----- atom/browser/web_view_manager.cc | 3 ++- 4 files changed, 17 insertions(+), 10 deletions(-) diff --git a/atom/browser/api/atom_api_web_contents.cc b/atom/browser/api/atom_api_web_contents.cc index b15a160bd1d..21b8024f296 100644 --- a/atom/browser/api/atom_api_web_contents.cc +++ b/atom/browser/api/atom_api_web_contents.cc @@ -1041,7 +1041,7 @@ void WebContents::NavigationEntryCommitted( } int64_t WebContents::GetIDForContents(content::WebContents* web_contents) { - int64_t process_id = web_contents->GetRenderProcessHost()->GetID(); + int64_t process_id = web_contents->GetMainFrame()->GetProcess()->GetID(); int64_t routing_id = web_contents->GetMainFrame()->GetRoutingID(); int64_t rv = (process_id << 32) + routing_id; return rv; @@ -1052,11 +1052,12 @@ int64_t WebContents::GetID() const { } int WebContents::GetProcessID() const { - return web_contents()->GetRenderProcessHost()->GetID(); + return web_contents()->GetMainFrame()->GetProcess()->GetID(); } base::ProcessId WebContents::GetOSProcessID() const { - auto process_handle = web_contents()->GetRenderProcessHost()->GetHandle(); + auto process_handle = + web_contents()->GetMainFrame()->GetProcess()->GetHandle(); return base::GetProcId(process_handle); } diff --git a/atom/browser/web_contents_preferences.cc b/atom/browser/web_contents_preferences.cc index 0a4d1a5fdbc..bc8b0f27bda 100644 --- a/atom/browser/web_contents_preferences.cc +++ b/atom/browser/web_contents_preferences.cc @@ -97,7 +97,7 @@ content::WebContents* WebContentsPreferences::GetWebContentsFromProcessID( int process_id) { for (WebContentsPreferences* preferences : instances_) { content::WebContents* web_contents = preferences->web_contents_; - if (web_contents->GetRenderProcessHost()->GetID() == process_id) + if (web_contents->GetMainFrame()->GetProcess()->GetID() == process_id) return web_contents; } return nullptr; diff --git a/atom/browser/web_contents_zoom_controller.cc b/atom/browser/web_contents_zoom_controller.cc index 3c8d512b6bb..82618e3696b 100644 --- a/atom/browser/web_contents_zoom_controller.cc +++ b/atom/browser/web_contents_zoom_controller.cc @@ -7,6 +7,7 @@ #include "content/public/browser/navigation_details.h" #include "content/public/browser/navigation_entry.h" #include "content/public/browser/navigation_handle.h" +#include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/render_view_host.h" #include "content/public/browser/web_contents.h" @@ -53,7 +54,8 @@ void WebContentsZoomController::SetZoomLevel(double level) { zoom_mode_ == ZOOM_MODE_DISABLED) return; - int render_process_id = web_contents()->GetRenderProcessHost()->GetID(); + int render_process_id = + web_contents()->GetRenderViewHost()->GetProcess()->GetID(); int render_view_id = web_contents()->GetRenderViewHost()->GetRoutingID(); if (zoom_mode_ == ZOOM_MODE_MANUAL) { @@ -98,7 +100,7 @@ double WebContentsZoomController::GetDefaultZoomFactor() { } void WebContentsZoomController::SetTemporaryZoomLevel(double level) { - old_process_id_ = web_contents()->GetRenderProcessHost()->GetID(); + old_process_id_ = web_contents()->GetRenderViewHost()->GetProcess()->GetID(); old_view_id_ = web_contents()->GetRenderViewHost()->GetRoutingID(); host_zoom_map_->SetTemporaryZoomLevel(old_process_id_, old_view_id_, level); // Notify observers of zoom level changes. @@ -107,7 +109,8 @@ void WebContentsZoomController::SetTemporaryZoomLevel(double level) { } bool WebContentsZoomController::UsesTemporaryZoomLevel() { - int render_process_id = web_contents()->GetRenderProcessHost()->GetID(); + int render_process_id = + web_contents()->GetRenderViewHost()->GetProcess()->GetID(); int render_view_id = web_contents()->GetRenderViewHost()->GetRoutingID(); return host_zoom_map_->UsesTemporaryZoomLevel(render_process_id, render_view_id); @@ -120,7 +123,8 @@ void WebContentsZoomController::SetZoomMode(ZoomMode new_mode) { content::HostZoomMap* zoom_map = content::HostZoomMap::GetForWebContents(web_contents()); - int render_process_id = web_contents()->GetRenderProcessHost()->GetID(); + int render_process_id = + web_contents()->GetRenderViewHost()->GetProcess()->GetID(); int render_view_id = web_contents()->GetRenderViewHost()->GetRoutingID(); double original_zoom_level = GetZoomLevel(); @@ -203,7 +207,8 @@ void WebContentsZoomController::ResetZoomModeOnNavigationIfNeeded( if (zoom_mode_ != ZOOM_MODE_ISOLATED && zoom_mode_ != ZOOM_MODE_MANUAL) return; - int render_process_id = web_contents()->GetRenderProcessHost()->GetID(); + int render_process_id = + web_contents()->GetRenderViewHost()->GetProcess()->GetID(); int render_view_id = web_contents()->GetRenderViewHost()->GetRoutingID(); content::HostZoomMap* zoom_map = content::HostZoomMap::GetForWebContents(web_contents()); diff --git a/atom/browser/web_view_manager.cc b/atom/browser/web_view_manager.cc index 96201b994ce..ce63d6e4412 100644 --- a/atom/browser/web_view_manager.cc +++ b/atom/browser/web_view_manager.cc @@ -5,6 +5,7 @@ #include "atom/browser/web_view_manager.h" #include "atom/browser/atom_browser_context.h" +#include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/web_contents.h" @@ -23,7 +24,7 @@ void WebViewManager::AddGuest(int guest_instance_id, web_contents_embedder_map_[guest_instance_id] = { web_contents, embedder }; // Map the element in embedder to guest. - int owner_process_id = embedder->GetRenderProcessHost()->GetID(); + int owner_process_id = embedder->GetMainFrame()->GetProcess()->GetID(); ElementInstanceKey key(owner_process_id, element_instance_id); element_instance_id_to_guest_map_[key] = guest_instance_id; } From 7356be01647f170dbfc5911b94ed28af456e2a3c Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Mon, 18 Dec 2017 15:14:50 +1100 Subject: [PATCH 23/98] Convert optional webpoint --- .../native_mate_converters/blink_converter.cc | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/atom/common/native_mate_converters/blink_converter.cc b/atom/common/native_mate_converters/blink_converter.cc index a262e9b1ba4..b2fb1113bb2 100644 --- a/atom/common/native_mate_converters/blink_converter.cc +++ b/atom/common/native_mate_converters/blink_converter.cc @@ -305,13 +305,21 @@ bool Converter::FromV8( return dict.Get("x", &out->x) && dict.Get("y", &out->y); } -bool Converter::FromV8( - v8::Isolate* isolate, v8::Local val, blink::WebPoint* out) { - mate::Dictionary dict; - if (!ConvertFromV8(isolate, val, &dict)) - return false; - return dict.Get("x", &out->x) && dict.Get("y", &out->y); -} +template<> +struct Converter> { + static bool FromV8( + v8::Isolate* isolate, v8::Local val, + base::Optional* out) { + mate::Dictionary dict; + if (!ConvertFromV8(isolate, val, &dict)) + return false; + blink::WebPoint point; + bool success = dict.Get("x", &point.x) && dict.Get("y", &point.y); + if (!success) return false; + out->emplace(point); + return true; + } +}; bool Converter::FromV8( v8::Isolate* isolate, v8::Local val, blink::WebSize* out) { From 5a2f85600dfa619f8bac3bb30794665fafa80c80 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Mon, 18 Dec 2017 15:17:03 +1100 Subject: [PATCH 24/98] Add support for size 64 skbitmap operations --- electron.gyp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/electron.gyp b/electron.gyp index 6f8fbcd0562..8af927adba6 100644 --- a/electron.gyp +++ b/electron.gyp @@ -268,6 +268,9 @@ # See Chromium src/third_party/protobuf/BUILD.gn 'GOOGLE_PROTOBUF_NO_RTTI', 'GOOGLE_PROTOBUF_NO_STATIC_INITIALIZER', + + # Enables SkBitmap size 64 operations + 'SK_SUPPORT_LEGACY_SAFESIZE64', ], 'sources': [ '<@(lib_sources)', From f80b32893768e00171d397df2c6a375615981dee Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Mon, 18 Dec 2017 15:45:24 +1100 Subject: [PATCH 25/98] WebExceptionCode has been removed --- atom/renderer/api/atom_api_web_frame.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/atom/renderer/api/atom_api_web_frame.cc b/atom/renderer/api/atom_api_web_frame.cc index c6dc365df31..9959e20daeb 100644 --- a/atom/renderer/api/atom_api_web_frame.cc +++ b/atom/renderer/api/atom_api_web_frame.cc @@ -167,9 +167,8 @@ void WebFrame::SetLayoutZoomLevelLimits(double min_level, double max_level) { v8::Local WebFrame::RegisterEmbedderCustomElement( const base::string16& name, v8::Local options) { - blink::WebExceptionCode c = 0; return web_frame_->GetDocument().RegisterEmbedderCustomElement( - blink::WebString::FromUTF16(name), options, c); + blink::WebString::FromUTF16(name), options); } void WebFrame::RegisterElementResizeCallback( From fdc7c183e8aa4c184c2100168fb7a50f821c220b Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Mon, 18 Dec 2017 18:05:45 +1100 Subject: [PATCH 26/98] Update libcc --- vendor/libchromiumcontent | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/libchromiumcontent b/vendor/libchromiumcontent index 9867ccf70be..6c174280e97 160000 --- a/vendor/libchromiumcontent +++ b/vendor/libchromiumcontent @@ -1 +1 @@ -Subproject commit 9867ccf70be0965d6d8afd9db5ebfcb767874a33 +Subproject commit 6c174280e97d0974ab8845f6e64f07bc8148f82a From 1c648f9714c80f36f950330e5780bde6d686a59a Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Mon, 18 Dec 2017 18:25:43 +1100 Subject: [PATCH 27/98] Add new includes for leveldb and webrtc --- electron.gyp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/electron.gyp b/electron.gyp index 8af927adba6..07acb13de7f 100644 --- a/electron.gyp +++ b/electron.gyp @@ -298,6 +298,11 @@ '<(libchromiumcontent_src_dir)/components/cdm', '<(libchromiumcontent_src_dir)/third_party/widevine', '<(libchromiumcontent_src_dir)/third_party/protobuf/src', + # The 'third_party/webrtc/modules/desktop_capture/desktop_capture_options.h' is using 'rtc_base/constructormagic.h'. + '<(libchromiumcontent_src_dir)/third_party/webrtc', + # leveldb includes are required + '<(libchromiumcontent_src_dir)/third_party/leveldatabase/src', + '<(libchromiumcontent_src_dir)/third_party/leveldatabase/src/include', ], 'direct_dependent_settings': { 'include_dirs': [ From 7c8be94a6e7af35e9a043f6c6130fb76b565d3ce Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Mon, 18 Dec 2017 18:54:44 +1100 Subject: [PATCH 28/98] IPC fixes for WebContents --- atom/browser/api/atom_api_web_contents.cc | 47 ++++++++++++++++------- atom/browser/api/atom_api_web_contents.h | 3 ++ 2 files changed, 36 insertions(+), 14 deletions(-) diff --git a/atom/browser/api/atom_api_web_contents.cc b/atom/browser/api/atom_api_web_contents.cc index 21b8024f296..93c65e448f6 100644 --- a/atom/browser/api/atom_api_web_contents.cc +++ b/atom/browser/api/atom_api_web_contents.cc @@ -896,6 +896,7 @@ void WebContents::DidFinishNavigation( void WebContents::TitleWasSet(content::NavigationEntry* entry) { auto title = entry ? entry->GetTitle() : base::string16(); bool explicit_set; + base::string16 final_title; if (entry && entry->GetURL().SchemeIsFile() && title.empty()) { final_title = base::UTF8ToUTF16(entry->GetURL().ExtractFileName()); explicit_set = false; @@ -903,7 +904,7 @@ void WebContents::TitleWasSet(content::NavigationEntry* entry) { base::TrimWhitespace(title, base::TRIM_ALL, &final_title); explicit_set = true; } - Emit("page-title-updated", title, explicit_set); + Emit("page-title-updated", final_title, explicit_set); } void WebContents::DidUpdateFaviconURL( @@ -967,6 +968,15 @@ void WebContents::ShowAutofillPopup(content::RenderFrameHost* frame_host, } } +// Should only be used for IPC message maps +bool WebContents::Send(IPC::Message* message) { + auto host = web_contents()->GetRenderViewHost(); + + if (host) + return host->Send(message); + return false; +} + bool WebContents::OnMessageReceived(const IPC::Message& message) { bool handled = true; IPC_BEGIN_MESSAGE_MAP(WebContents, message) @@ -1275,14 +1285,20 @@ void WebContents::EnableDeviceEmulation( if (type_ == REMOTE) return; - Send(new ViewMsg_EnableDeviceEmulation(routing_id(), params)); + auto host = web_contents()->GetRenderViewHost(); + + if (host) + host->Send(new ViewMsg_EnableDeviceEmulation(host->GetRoutingID(), params)); } void WebContents::DisableDeviceEmulation() { if (type_ == REMOTE) return; - Send(new ViewMsg_DisableDeviceEmulation(routing_id())); + auto host = web_contents()->GetRenderViewHost(); + + if (host) + host->Send(new ViewMsg_DisableDeviceEmulation(host->GetRoutingID())); } void WebContents::ToggleDevTools() { @@ -1524,10 +1540,10 @@ void WebContents::TabTraverse(bool reverse) { bool WebContents::SendIPCMessage(bool all_frames, const base::string16& channel, const base::ListValue& args) { - auto frame_host = web_contents()->GetMainFrame(); - if (frame_host) { - return frame_host->Send(new AtomFrameMsg_Message( - frame_host->GetRoutingID(), all_frames, channel, args)); + auto host = web_contents()->GetRenderViewHost(); + if (host) { + return host->Send(new AtomViewMsg_Message(host->GetRoutingID(), + all_frames, channel, args)); } return false; } @@ -1818,15 +1834,18 @@ void WebContents::OnSetTemporaryZoomLevel(content::RenderFrameHost* rfh, IPC::Message* reply_msg) { zoom_controller_->SetTemporaryZoomLevel(level); double new_level = zoom_controller_->GetZoomLevel(); - AtomFrameHostMsg_SetTemporaryZoomLevel::WriteReplyParams(reply_msg, - new_level); - rfh->Send(reply_msg); + AtomViewHostMsg_SetTemporaryZoomLevel::WriteReplyParams(reply_msg, new_level); + + auto host = web_contents()->GetRenderViewHost(); + if (host) + host->Send(reply_msg); } -void WebContents::OnGetZoomLevel(content::RenderFrameHost* rfh, - IPC::Message* reply_msg) { - AtomFrameHostMsg_GetZoomLevel::WriteReplyParams(reply_msg, GetZoomLevel()); - rfh->Send(reply_msg); +void WebContents::OnGetZoomLevel(IPC::Message* reply_msg) { + AtomViewHostMsg_GetZoomLevel::WriteReplyParams(reply_msg, GetZoomLevel()); + auto host = web_contents()->GetRenderViewHost(); + if (host) + host->Send(reply_msg); } v8::Local WebContents::GetWebPreferences(v8::Isolate* isolate) { diff --git a/atom/browser/api/atom_api_web_contents.h b/atom/browser/api/atom_api_web_contents.h index 00e4b5a84a1..96bbd426504 100644 --- a/atom/browser/api/atom_api_web_contents.h +++ b/atom/browser/api/atom_api_web_contents.h @@ -149,6 +149,9 @@ class WebContents : public mate::TrackableObject, void AddWorkSpace(mate::Arguments* args, const base::FilePath& path); void RemoveWorkSpace(mate::Arguments* args, const base::FilePath& path); + // IPC + bool Send(IPC::Message* message); + // Editing commands. void Undo(); void Redo(); From 37a321a601204d2a375ef50124bfe60a942de04a Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Mon, 18 Dec 2017 18:55:03 +1100 Subject: [PATCH 29/98] Fix super fast hash and blocking pool --- .../chrome/browser/media/native_desktop_media_list.cc | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/chromium_src/chrome/browser/media/native_desktop_media_list.cc b/chromium_src/chrome/browser/media/native_desktop_media_list.cc index f0eb075eba9..8b95d53dcd8 100644 --- a/chromium_src/chrome/browser/media/native_desktop_media_list.cc +++ b/chromium_src/chrome/browser/media/native_desktop_media_list.cc @@ -14,6 +14,7 @@ using base::PlatformThreadRef; #include "base/logging.h" #include "base/strings/string_number_conversions.h" #include "base/strings/utf_string_conversions.h" +#include "base/task_scheduler/post_task.h" #include "base/threading/sequenced_worker_pool.h" #include "chrome/browser/media/desktop_media_list_observer.h" #include "content/public/browser/browser_thread.h" @@ -28,6 +29,8 @@ using base::PlatformThreadRef; using content::BrowserThread; using content::DesktopMediaID; +extern "C" uint32_t SuperFastHash(const char* data, int len); + namespace { // Update the list every second. @@ -37,7 +40,7 @@ const int kDefaultUpdatePeriod = 1000; // media source has changed. uint32_t GetFrameHash(webrtc::DesktopFrame* frame) { int data_size = frame->stride() * frame->size().height(); - return base::SuperFastHash(reinterpret_cast(frame->data()), data_size); + return SuperFastHash(reinterpret_cast(frame->data()), data_size); } gfx::ImageSkia ScaleDesktopFrame(std::unique_ptr frame, @@ -235,9 +238,8 @@ NativeDesktopMediaList::NativeDesktopMediaList( view_dialog_id_(-1), observer_(NULL), weak_factory_(this) { - base::SequencedWorkerPool* worker_pool = BrowserThread::GetBlockingPool(); - capture_task_runner_ = worker_pool->GetSequencedTaskRunner( - worker_pool->GetSequenceToken()); + capture_task_runner_ = base::CreateSequencedTaskRunnerWithTraits( + {base::MayBlock()}); } NativeDesktopMediaList::~NativeDesktopMediaList() { From 4d234e3abcfc6b599c61911029048742544331e0 Mon Sep 17 00:00:00 2001 From: Aleksei Kuzmin Date: Mon, 18 Dec 2017 12:27:55 +0300 Subject: [PATCH 30/98] Update Node.js submodule to fix a compilation error --- vendor/node | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/node b/vendor/node index 668f3cd06e0..1d239b60fe8 160000 --- a/vendor/node +++ b/vendor/node @@ -1 +1 @@ -Subproject commit 668f3cd06e0b9c24a1aa2d913f22626fff7decd2 +Subproject commit 1d239b60fe800013dd90753eb77a4ad9168c8652 From 481c70311a5033639b897f8dd0c70f466753bdbb Mon Sep 17 00:00:00 2001 From: Aleksei Kuzmin Date: Mon, 18 Dec 2017 12:31:54 +0300 Subject: [PATCH 31/98] Move SoftwareOutputDevice to the viz service display compositor. https://chromium-review.googlesource.com/677463 --- atom/browser/osr/osr_output_device.cc | 2 +- atom/browser/osr/osr_output_device.h | 6 +++--- atom/browser/osr/osr_render_widget_host_view.cc | 2 +- atom/browser/osr/osr_render_widget_host_view.h | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/atom/browser/osr/osr_output_device.cc b/atom/browser/osr/osr_output_device.cc index ed444dca756..1dec51c78d7 100644 --- a/atom/browser/osr/osr_output_device.cc +++ b/atom/browser/osr/osr_output_device.cc @@ -73,7 +73,7 @@ void OffScreenOutputDevice::EndPaint() { if (!bitmap_.get()) return; - cc::SoftwareOutputDevice::EndPaint(); + viz::SoftwareOutputDevice::EndPaint(); if (active_) OnPaint(damage_rect_); diff --git a/atom/browser/osr/osr_output_device.h b/atom/browser/osr/osr_output_device.h index f76b3b28e8c..9ef6dc484aa 100644 --- a/atom/browser/osr/osr_output_device.h +++ b/atom/browser/osr/osr_output_device.h @@ -6,7 +6,7 @@ #define ATOM_BROWSER_OSR_OSR_OUTPUT_DEVICE_H_ #include "base/callback.h" -#include "cc/output/software_output_device.h" +#include "components/viz/service/display/software_output_device.h" #include "third_party/skia/include/core/SkBitmap.h" #include "third_party/skia/include/core/SkCanvas.h" @@ -14,12 +14,12 @@ namespace atom { typedef base::Callback OnPaintCallback; -class OffScreenOutputDevice : public cc::SoftwareOutputDevice { +class OffScreenOutputDevice : public viz::SoftwareOutputDevice { public: OffScreenOutputDevice(bool transparent, const OnPaintCallback& callback); ~OffScreenOutputDevice(); - // cc::SoftwareOutputDevice: + // viz::SoftwareOutputDevice: void Resize(const gfx::Size& pixel_size, float scale_factor) override; SkCanvas* BeginPaint(const gfx::Rect& damage_rect) override; void EndPaint() override; diff --git a/atom/browser/osr/osr_render_widget_host_view.cc b/atom/browser/osr/osr_render_widget_host_view.cc index 328671f09df..3fe749c477e 100644 --- a/atom/browser/osr/osr_render_widget_host_view.cc +++ b/atom/browser/osr/osr_render_widget_host_view.cc @@ -902,7 +902,7 @@ void OffScreenRenderWidgetHostView::OnGuestViewFrameSwapped( RegisterGuestViewFrameSwappedCallback(guest_host_view); } -std::unique_ptr +std::unique_ptr OffScreenRenderWidgetHostView::CreateSoftwareOutputDevice( ui::Compositor* compositor) { DCHECK_EQ(GetCompositor(), compositor); diff --git a/atom/browser/osr/osr_render_widget_host_view.h b/atom/browser/osr/osr_render_widget_host_view.h index f8867fbae30..7173335daf5 100644 --- a/atom/browser/osr/osr_render_widget_host_view.h +++ b/atom/browser/osr/osr_render_widget_host_view.h @@ -196,7 +196,7 @@ class OffScreenRenderWidgetHostView gfx::Point* transformed_point) override; // ui::CompositorDelegate: - std::unique_ptr CreateSoftwareOutputDevice( + std::unique_ptr CreateSoftwareOutputDevice( ui::Compositor* compositor) override; bool InstallTransparency(); From d1061692d5b049487584a01075fb32fa34dbf05e Mon Sep 17 00:00:00 2001 From: Aleksei Kuzmin Date: Mon, 18 Dec 2017 12:40:36 +0300 Subject: [PATCH 32/98] Move CompositorFrame{Metadata} to viz/common/quads. https://chromium-review.googlesource.com/676726 --- atom/browser/osr/osr_render_widget_host_view.cc | 2 +- atom/browser/osr/osr_render_widget_host_view.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/atom/browser/osr/osr_render_widget_host_view.cc b/atom/browser/osr/osr_render_widget_host_view.cc index 3fe749c477e..ecefd03ba79 100644 --- a/atom/browser/osr/osr_render_widget_host_view.cc +++ b/atom/browser/osr/osr_render_widget_host_view.cc @@ -544,7 +544,7 @@ void OffScreenRenderWidgetHostView::DidCreateNewRendererCompositorFrameSink( void OffScreenRenderWidgetHostView::SubmitCompositorFrame( const viz::LocalSurfaceId& local_surface_id, - cc::CompositorFrame frame) { + viz::CompositorFrame frame) { TRACE_EVENT0("electron", "OffScreenRenderWidgetHostView::SubmitCompositorFrame"); diff --git a/atom/browser/osr/osr_render_widget_host_view.h b/atom/browser/osr/osr_render_widget_host_view.h index 7173335daf5..0841b8266a8 100644 --- a/atom/browser/osr/osr_render_widget_host_view.h +++ b/atom/browser/osr/osr_render_widget_host_view.h @@ -20,9 +20,9 @@ #include "base/process/kill.h" #include "base/threading/thread.h" #include "base/time/time.h" -#include "cc/output/compositor_frame.h" #include "components/viz/common/frame_sinks/begin_frame_args.h" #include "components/viz/common/frame_sinks/begin_frame_source.h" +#include "components/viz/common/quads/compositor_frame.h" #include "content/browser/frame_host/render_widget_host_view_guest.h" #include "content/browser/renderer_host/compositor_resize_lock.h" #include "content/browser/renderer_host/delegated_frame_host.h" @@ -122,7 +122,7 @@ class OffScreenRenderWidgetHostView viz::mojom::CompositorFrameSinkClient* renderer_compositor_frame_sink) override; void SubmitCompositorFrame(const viz::LocalSurfaceId& local_surface_id, - cc::CompositorFrame frame) override; + viz::CompositorFrame frame) override; void ClearCompositorFrame(void) override; void InitAsPopup(content::RenderWidgetHostView *rwhv, const gfx::Rect& rect) From 74cedd3255528bc9a1a0a30611868ef36938bbf5 Mon Sep 17 00:00:00 2001 From: Aleksei Kuzmin Date: Mon, 18 Dec 2017 13:07:27 +0300 Subject: [PATCH 33/98] Move ReleaseCallbacks and CopyOutputRequests out of quads/ https://chromium-review.googlesource.com/682760 --- atom/browser/osr/osr_render_widget_host_view.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atom/browser/osr/osr_render_widget_host_view.cc b/atom/browser/osr/osr_render_widget_host_view.cc index ecefd03ba79..f8363664c39 100644 --- a/atom/browser/osr/osr_render_widget_host_view.cc +++ b/atom/browser/osr/osr_render_widget_host_view.cc @@ -14,9 +14,9 @@ #include "base/memory/ptr_util.h" #include "base/single_thread_task_runner.h" #include "base/time/time.h" +#include "components/viz/common/frame_sinks/copy_output_request.h" #include "components/viz/common/frame_sinks/delay_based_time_source.h" #include "components/viz/common/gl_helper.h" -#include "components/viz/common/quads/copy_output_request.h" #include "content/browser/renderer_host/compositor_resize_lock.h" #include "content/browser/renderer_host/render_widget_host_delegate.h" #include "content/browser/renderer_host/render_widget_host_impl.h" From aab6f27503aa12b1c186a453015ea054a5a5726d Mon Sep 17 00:00:00 2001 From: Aleksei Kuzmin Date: Mon, 18 Dec 2017 13:09:51 +0300 Subject: [PATCH 34/98] Move DrawQuads to components/viz/ https://chromium-review.googlesource.com/667539 --- atom/browser/osr/osr_render_widget_host_view.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/atom/browser/osr/osr_render_widget_host_view.cc b/atom/browser/osr/osr_render_widget_host_view.cc index f8363664c39..10075b2f9eb 100644 --- a/atom/browser/osr/osr_render_widget_host_view.cc +++ b/atom/browser/osr/osr_render_widget_host_view.cc @@ -17,6 +17,7 @@ #include "components/viz/common/frame_sinks/copy_output_request.h" #include "components/viz/common/frame_sinks/delay_based_time_source.h" #include "components/viz/common/gl_helper.h" +#include "components/viz/common/quads/render_pass.h" #include "content/browser/renderer_host/compositor_resize_lock.h" #include "content/browser/renderer_host/render_widget_host_delegate.h" #include "content/browser/renderer_host/render_widget_host_impl.h" @@ -573,7 +574,7 @@ void OffScreenRenderWidgetHostView::SubmitCompositorFrame( // Determine the damage rectangle for the current frame. This is the same // calculation that SwapDelegatedFrame uses. - cc::RenderPass* root_pass = frame.render_pass_list.back().get(); + viz::RenderPass* root_pass = frame.render_pass_list.back().get(); gfx::Size frame_size = root_pass->output_rect.size(); gfx::Rect damage_rect = gfx::ToEnclosingRect(gfx::RectF(root_pass->damage_rect)); From dcece31519da9696ec1ff8139d44b867f105c20e Mon Sep 17 00:00:00 2001 From: Aleksei Kuzmin Date: Tue, 19 Dec 2017 01:21:32 +0300 Subject: [PATCH 35/98] FIXME: Disable OSR by default --- features.gypi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features.gypi b/features.gypi index 5aca98fc475..04bc4452b3c 100644 --- a/features.gypi +++ b/features.gypi @@ -2,7 +2,7 @@ # If it looks stupid but it works it ain't stupid. 'variables': { 'variables': { - 'enable_osr%': 1, + 'enable_osr%': 0, # FIXME(alexeykuzmin) 'enable_run_as_node%': 1, }, 'enable_osr%': '<(enable_osr)', From 9181db1304b35483672e6ae7b3bc9142e249bda3 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Tue, 19 Dec 2017 10:50:59 +1100 Subject: [PATCH 36/98] Disable tautological check for chromium code --- brightray/brightray.gypi | 2 ++ 1 file changed, 2 insertions(+) diff --git a/brightray/brightray.gypi b/brightray/brightray.gypi index 7c7189af1af..2f5109d00e6 100644 --- a/brightray/brightray.gypi +++ b/brightray/brightray.gypi @@ -375,6 +375,7 @@ '-Wno-undefined-var-template', # https://crbug.com/604888 '-Wno-unneeded-internal-declaration', '-Wno-inconsistent-missing-override', + '-Wno-tautological-unsigned-enum-zero-compare', ], }, }], @@ -382,6 +383,7 @@ 'cflags': [ '-Wno-inconsistent-missing-override', '-Wno-undefined-var-template', # https://crbug.com/604888 + '-Wno-tautological-unsigned-enum-zero-compare', ], }], ['OS=="win"', { From 0b6293e2f5b54dbc196d9a00d3dab6a097528ba2 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Tue, 19 Dec 2017 10:55:40 +1100 Subject: [PATCH 37/98] Pickle write methods now return void and use GE_CHECK instead --- .../pepper_flash_clipboard_message_filter.cc | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/chromium_src/chrome/browser/renderer_host/pepper/pepper_flash_clipboard_message_filter.cc b/chromium_src/chrome/browser/renderer_host/pepper/pepper_flash_clipboard_message_filter.cc index 20f4957a3b5..000cf56771c 100644 --- a/chromium_src/chrome/browser/renderer_host/pepper/pepper_flash_clipboard_message_filter.cc +++ b/chromium_src/chrome/browser/renderer_host/pepper/pepper_flash_clipboard_message_filter.cc @@ -83,18 +83,15 @@ std::string ReadDataFromPickle(const base::string16& format, return result; } -bool WriteDataToPickle(const std::map& data, +void WriteDataToPickle(const std::map& data, base::Pickle* pickle) { pickle->WriteUInt32(data.size()); for (std::map::const_iterator it = data.begin(); it != data.end(); ++it) { - if (!pickle->WriteString16(it->first)) - return false; - if (!pickle->WriteString(it->second)) - return false; + pickle->WriteString16(it->first); + pickle->WriteString(it->second); } - return true; } } // namespace @@ -344,12 +341,9 @@ int32_t PepperFlashClipboardMessageFilter::OnMsgWriteData( if (custom_data_map.size() > 0) { base::Pickle pickle; - if (WriteDataToPickle(custom_data_map, &pickle)) { - scw.WritePickledData(pickle, - ui::Clipboard::GetPepperCustomDataFormatType()); - } else { - res = PP_ERROR_BADARGUMENT; - } + WriteDataToPickle(custom_data_map, &pickle); + scw.WritePickledData(pickle, + ui::Clipboard::GetPepperCustomDataFormatType()); } if (res != PP_OK) { From a21e0c652c12590e3c7eb50e48634b72c35ff7cb Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Tue, 19 Dec 2017 11:06:42 +1100 Subject: [PATCH 38/98] Fix WorkerPool and IPC send inside print job/manager --- chromium_src/chrome/browser/printing/print_job.cc | 7 +++---- .../chrome/browser/printing/print_view_manager_base.cc | 4 +++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/chromium_src/chrome/browser/printing/print_job.cc b/chromium_src/chrome/browser/printing/print_job.cc index ed44cde8e63..68c6aefa33d 100644 --- a/chromium_src/chrome/browser/printing/print_job.cc +++ b/chromium_src/chrome/browser/printing/print_job.cc @@ -13,11 +13,11 @@ #include "base/memory/ptr_util.h" #include "base/message_loop/message_loop.h" #include "base/run_loop.h" +#include "base/task_scheduler/post_task.h" #include "base/single_thread_task_runner.h" #include "base/threading/sequenced_worker_pool.h" #include "base/threading/thread_restrictions.h" #include "base/threading/thread_task_runner_handle.h" -#include "base/threading/worker_pool.h" #include "build/build_config.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/printing/print_job_worker.h" @@ -435,11 +435,10 @@ void PrintJob::ControlledWorkerShutdown() { // Now make sure the thread object is cleaned up. Do this on a worker // thread because it may block. - base::WorkerPool::PostTaskAndReply( + base::PostTaskAndReply( FROM_HERE, base::Bind(&PrintJobWorker::Stop, base::Unretained(worker_.get())), - base::Bind(&PrintJob::HoldUntilStopIsCalled, this), - false); + base::Bind(&PrintJob::HoldUntilStopIsCalled, this)); is_job_pending_ = false; registrar_.RemoveAll(); diff --git a/chromium_src/chrome/browser/printing/print_view_manager_base.cc b/chromium_src/chrome/browser/printing/print_view_manager_base.cc index 85ae2022b7a..a7ccf6796c2 100644 --- a/chromium_src/chrome/browser/printing/print_view_manager_base.cc +++ b/chromium_src/chrome/browser/printing/print_view_manager_base.cc @@ -378,8 +378,10 @@ void PrintViewManagerBase::DisconnectFromCurrentPrintJob() { } void PrintViewManagerBase::PrintingDone(bool success) { + auto host = web_contents()->GetRenderViewHost(); if (print_job_.get()) { - Send(new PrintMsg_PrintingDone(routing_id(), success)); + if (host) + host->Send(new PrintMsg_PrintingDone(host->GetRoutingID(), success)); } if (!callback.is_null()) { callback.Run(success && print_job_); From b0fe23072dc58de481ff910550a486931743f081 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Tue, 19 Dec 2017 11:47:54 +1100 Subject: [PATCH 39/98] Update chrome version --- atom/common/chrome_version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atom/common/chrome_version.h b/atom/common/chrome_version.h index 7e86ba50cd5..e4e34bd1a50 100644 --- a/atom/common/chrome_version.h +++ b/atom/common/chrome_version.h @@ -8,7 +8,7 @@ #ifndef ATOM_COMMON_CHROME_VERSION_H_ #define ATOM_COMMON_CHROME_VERSION_H_ -#define CHROME_VERSION_STRING "63.0.3239.84" +#define CHROME_VERSION_STRING "63.0.3239.108" #define CHROME_VERSION "v" CHROME_VERSION_STRING #endif // ATOM_COMMON_CHROME_VERSION_H_ From 78266db427f10761ce86fc9d85ebdf1c61641f38 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Tue, 19 Dec 2017 11:56:21 +1100 Subject: [PATCH 40/98] Fix webrtc linking issues --- brightray/brightray.gyp | 4 ++-- .../chrome/browser/media/native_desktop_media_list.cc | 4 +--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/brightray/brightray.gyp b/brightray/brightray.gyp index 63ceb3e8a0c..1a224f7eb53 100644 --- a/brightray/brightray.gyp +++ b/brightray/brightray.gyp @@ -111,7 +111,7 @@ '<(libchromiumcontent_dir)/libdom_keycode_converter.a', '<(libchromiumcontent_dir)/libsystem_wrappers.a', '<(libchromiumcontent_dir)/librtc_base.a', - '<(libchromiumcontent_dir)/librtc_base_approved.a', + '<(libchromiumcontent_dir)/librtc_base_generic.a', '<(libchromiumcontent_dir)/libwebrtc_common.a', '<(libchromiumcontent_dir)/libinit_webrtc.a', '<(libchromiumcontent_dir)/libyuv.a', @@ -194,7 +194,7 @@ '<(libchromiumcontent_dir)/libdesktop_capture.a', '<(libchromiumcontent_dir)/libdom_keycode_converter.a', '<(libchromiumcontent_dir)/librtc_base.a', - '<(libchromiumcontent_dir)/librtc_base_approved.a', + '<(libchromiumcontent_dir)/librtc_base_generic.a', '<(libchromiumcontent_dir)/libsystem_wrappers.a', '<(libchromiumcontent_dir)/libwebrtc_common.a', '<(libchromiumcontent_dir)/libinit_webrtc.a', diff --git a/chromium_src/chrome/browser/media/native_desktop_media_list.cc b/chromium_src/chrome/browser/media/native_desktop_media_list.cc index 8b95d53dcd8..4a201adaf03 100644 --- a/chromium_src/chrome/browser/media/native_desktop_media_list.cc +++ b/chromium_src/chrome/browser/media/native_desktop_media_list.cc @@ -29,8 +29,6 @@ using base::PlatformThreadRef; using content::BrowserThread; using content::DesktopMediaID; -extern "C" uint32_t SuperFastHash(const char* data, int len); - namespace { // Update the list every second. @@ -40,7 +38,7 @@ const int kDefaultUpdatePeriod = 1000; // media source has changed. uint32_t GetFrameHash(webrtc::DesktopFrame* frame) { int data_size = frame->stride() * frame->size().height(); - return SuperFastHash(reinterpret_cast(frame->data()), data_size); + return base::Hash(frame->data(), data_size); } gfx::ImageSkia ScaleDesktopFrame(std::unique_ptr frame, From 8269a6dc3737c14737e9c348f046987d54028352 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Tue, 19 Dec 2017 11:57:10 +1100 Subject: [PATCH 41/98] Temporarily disable OnCursorChange ScopedProfile is removed https://chromium-review.googlesource.com/c/chromium/src/+/655147 --- atom/browser/api/atom_api_web_contents.cc | 2 +- atom/common/mouse_util.h | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/atom/browser/api/atom_api_web_contents.cc b/atom/browser/api/atom_api_web_contents.cc index 93c65e448f6..9f96ac0edf4 100644 --- a/atom/browser/api/atom_api_web_contents.cc +++ b/atom/browser/api/atom_api_web_contents.cc @@ -981,7 +981,7 @@ bool WebContents::OnMessageReceived(const IPC::Message& message) { bool handled = true; IPC_BEGIN_MESSAGE_MAP(WebContents, message) IPC_MESSAGE_HANDLER_CODE(ViewHostMsg_SetCursor, OnCursorChange, - handled = false) + handled = false) IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() diff --git a/atom/common/mouse_util.h b/atom/common/mouse_util.h index cdccde2e5e6..4a4d0638f01 100644 --- a/atom/common/mouse_util.h +++ b/atom/common/mouse_util.h @@ -18,7 +18,6 @@ #define IPC_MESSAGE_FORWARD_CODE(msg_class, obj, member_func, code) \ case msg_class::ID: { \ - TRACK_RUN_IN_THIS_SCOPED_REGION(member_func); \ if (!msg_class::Dispatch(&ipc_message__, obj, this, param__, \ &member_func)) \ ipc_message__.set_dispatch_error(); \ From 490b1e2532f58118ed01ec92b3062096fd294b3f Mon Sep 17 00:00:00 2001 From: Aleksei Kuzmin Date: Tue, 19 Dec 2017 18:04:23 +0300 Subject: [PATCH 42/98] FIXME: Disable some tests to avoid crashes --- spec/api-web-contents-spec.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spec/api-web-contents-spec.js b/spec/api-web-contents-spec.js index cf902522899..47d1786bc28 100644 --- a/spec/api-web-contents-spec.js +++ b/spec/api-web-contents-spec.js @@ -92,7 +92,9 @@ describe('webContents module', () => { }) }) - describe('setDevToolsWebCotnents() API', () => { + // TODO(alexeykuzmin): Disabled during Ch63 upgrade. + // Fix it and enable back. + xdescribe('setDevToolsWebCotnents() API', () => { it('sets arbitry webContents as devtools', (done) => { let devtools = new BrowserWindow({show: false}) devtools.webContents.once('dom-ready', () => { From 007ea500d0094ba42f73d24b2ba04b1bacc522fe Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Tue, 19 Dec 2017 23:47:48 +0530 Subject: [PATCH 43/98] REVIEW: Re-use devtools network throttling from content layer https://chromium-review.googlesource.com/c/chromium/src/+/664356 --- atom/browser/api/atom_api_session.cc | 21 +- atom/browser/net/atom_network_delegate.cc | 10 +- atom/browser/net/url_request_fetch_job.cc | 6 +- brightray/browser/browser_context.cc | 1 - brightray/browser/browser_context.h | 7 - .../browser/devtools_manager_delegate.cc | 8 +- brightray/browser/devtools_manager_delegate.h | 4 - .../net/devtools_network_conditions.cc | 35 -- .../browser/net/devtools_network_conditions.h | 39 --- .../net/devtools_network_controller.cc | 78 ----- .../browser/net/devtools_network_controller.h | 44 --- .../net/devtools_network_controller_handle.cc | 60 ---- .../net/devtools_network_controller_handle.h | 45 --- .../net/devtools_network_interceptor.cc | 293 ----------------- .../net/devtools_network_interceptor.h | 107 ------- .../net/devtools_network_protocol_handler.cc | 173 ---------- .../net/devtools_network_protocol_handler.h | 48 --- .../net/devtools_network_transaction.cc | 302 ------------------ .../net/devtools_network_transaction.h | 113 ------- .../devtools_network_transaction_factory.cc | 53 --- .../devtools_network_transaction_factory.h | 39 --- .../devtools_network_upload_data_stream.cc | 96 ------ .../net/devtools_network_upload_data_stream.h | 50 --- .../browser/url_request_context_getter.cc | 23 +- .../browser/url_request_context_getter.h | 3 - brightray/filenames.gypi | 16 - 26 files changed, 23 insertions(+), 1651 deletions(-) delete mode 100644 brightray/browser/net/devtools_network_conditions.cc delete mode 100644 brightray/browser/net/devtools_network_conditions.h delete mode 100644 brightray/browser/net/devtools_network_controller.cc delete mode 100644 brightray/browser/net/devtools_network_controller.h delete mode 100644 brightray/browser/net/devtools_network_controller_handle.cc delete mode 100644 brightray/browser/net/devtools_network_controller_handle.h delete mode 100644 brightray/browser/net/devtools_network_interceptor.cc delete mode 100644 brightray/browser/net/devtools_network_interceptor.h delete mode 100644 brightray/browser/net/devtools_network_protocol_handler.cc delete mode 100644 brightray/browser/net/devtools_network_protocol_handler.h delete mode 100644 brightray/browser/net/devtools_network_transaction.cc delete mode 100644 brightray/browser/net/devtools_network_transaction.h delete mode 100644 brightray/browser/net/devtools_network_transaction_factory.cc delete mode 100644 brightray/browser/net/devtools_network_transaction_factory.h delete mode 100644 brightray/browser/net/devtools_network_upload_data_stream.cc delete mode 100644 brightray/browser/net/devtools_network_upload_data_stream.h diff --git a/atom/browser/api/atom_api_session.cc b/atom/browser/api/atom_api_session.cc index b7b6b2abca6..f55ecc44403 100644 --- a/atom/browser/api/atom_api_session.cc +++ b/atom/browser/api/atom_api_session.cc @@ -31,11 +31,11 @@ #include "base/strings/string_util.h" #include "base/threading/thread_task_runner_handle.h" #include "brightray/browser/media/media_device_id_salt.h" -#include "brightray/browser/net/devtools_network_conditions.h" -#include "brightray/browser/net/devtools_network_controller_handle.h" #include "chrome/browser/browser_process.h" #include "chrome/common/pref_names.h" #include "components/prefs/pref_service.h" +#include "content/common/devtools/devtools_network_conditions.h" +#include "content/common/devtools/devtools_network_controller.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/download_manager_delegate.h" #include "content/public/browser/storage_partition.h" @@ -543,23 +543,20 @@ void Session::SetDownloadPath(const base::FilePath& path) { } void Session::EnableNetworkEmulation(const mate::Dictionary& options) { - std::unique_ptr conditions; + std::unique_ptr conditions; bool offline = false; double latency = 0.0, download_throughput = 0.0, upload_throughput = 0.0; if (options.Get("offline", &offline) && offline) { - conditions.reset(new brightray::DevToolsNetworkConditions(offline)); + conditions.reset(new content::DevToolsNetworkConditions(offline)); } else { options.Get("latency", &latency); options.Get("downloadThroughput", &download_throughput); options.Get("uploadThroughput", &upload_throughput); - conditions.reset( - new brightray::DevToolsNetworkConditions(false, - latency, - download_throughput, - upload_throughput)); + conditions.reset(new content::DevToolsNetworkConditions( + false, latency, download_throughput, upload_throughput)); } - browser_context_->network_controller_handle()->SetNetworkState( + content::DevToolsNetworkController::SetNetworkState( devtools_network_emulation_client_id_, std::move(conditions)); BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, @@ -570,8 +567,8 @@ void Session::EnableNetworkEmulation(const mate::Dictionary& options) { } void Session::DisableNetworkEmulation() { - std::unique_ptr conditions; - browser_context_->network_controller_handle()->SetNetworkState( + auto conditions = base::MakeUnique(); + content::DevToolsNetworkController::SetNetworkState( devtools_network_emulation_client_id_, std::move(conditions)); BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, diff --git a/atom/browser/net/atom_network_delegate.cc b/atom/browser/net/atom_network_delegate.cc index 680459a14c8..fe4424af5fa 100644 --- a/atom/browser/net/atom_network_delegate.cc +++ b/atom/browser/net/atom_network_delegate.cc @@ -10,12 +10,12 @@ #include "atom/common/native_mate_converters/net_converter.h" #include "base/stl_util.h" #include "base/strings/string_util.h" -#include "brightray/browser/net/devtools_network_transaction.h" +#include "content/common/devtools/devtools_network_transaction.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/render_frame_host.h" #include "net/url_request/url_request.h" -using brightray::DevToolsNetworkTransaction; +using content::DevToolsNetworkTransaction; using content::BrowserThread; namespace atom { @@ -266,9 +266,9 @@ int AtomNetworkDelegate::OnBeforeStartTransaction( const net::CompletionCallback& callback, net::HttpRequestHeaders* headers) { if (!client_id_.empty()) - headers->SetHeader( - DevToolsNetworkTransaction::kDevToolsEmulateNetworkConditionsClientId, - client_id_); + headers->SetHeader(content::DevToolsNetworkTransaction:: + kDevToolsEmulateNetworkConditionsClientId, + client_id_); if (!base::ContainsKey(response_listeners_, kOnBeforeSendHeaders)) return brightray::NetworkDelegate::OnBeforeStartTransaction( request, callback, headers); diff --git a/atom/browser/net/url_request_fetch_job.cc b/atom/browser/net/url_request_fetch_job.cc index 2a941711f68..bc3016d1d4a 100644 --- a/atom/browser/net/url_request_fetch_job.cc +++ b/atom/browser/net/url_request_fetch_job.cc @@ -96,9 +96,9 @@ void URLRequestFetchJob::BeforeStartInUI( if (val->IsNull()) { // We have to create the URLRequestContextGetter on UI thread. url_request_context_getter_ = new brightray::URLRequestContextGetter( - this, nullptr, nullptr, base::FilePath(), true, - BrowserThread::GetTaskRunnerForThread(BrowserThread::IO), - nullptr, content::URLRequestInterceptorScopedVector()); + this, nullptr, base::FilePath(), true, + BrowserThread::GetTaskRunnerForThread(BrowserThread::IO), nullptr, + content::URLRequestInterceptorScopedVector()); } else { mate::Handle session; if (mate::ConvertFromV8(isolate, val, &session) && !session.IsEmpty()) { diff --git a/brightray/browser/browser_context.cc b/brightray/browser/browser_context.cc index 83a3833845d..abf8f698f55 100644 --- a/brightray/browser/browser_context.cc +++ b/brightray/browser/browser_context.cc @@ -132,7 +132,6 @@ net::URLRequestContextGetter* BrowserContext::CreateRequestContext( DCHECK(!url_request_getter_.get()); url_request_getter_ = new URLRequestContextGetter( this, - network_controller_handle(), static_cast(BrowserClient::Get()->GetNetLog()), GetPath(), in_memory_, diff --git a/brightray/browser/browser_context.h b/brightray/browser/browser_context.h index 449e8e8f286..25386099dd9 100644 --- a/brightray/browser/browser_context.h +++ b/brightray/browser/browser_context.h @@ -11,7 +11,6 @@ #include "base/memory/ref_counted.h" #include "base/memory/weak_ptr.h" #include "brightray/browser/media/media_device_id_salt.h" -#include "brightray/browser/net/devtools_network_controller_handle.h" #include "brightray/browser/permission_manager.h" #include "brightray/browser/url_request_context_getter.h" #include "content/public/browser/browser_context.h" @@ -76,10 +75,6 @@ class BrowserContext : public base::RefCounted, return url_request_getter_.get(); } - DevToolsNetworkControllerHandle* network_controller_handle() { - return &network_controller_handle_; - } - void InitPrefs(); PrefService* prefs() { return prefs_.get(); } @@ -126,8 +121,6 @@ class BrowserContext : public base::RefCounted, base::FilePath path_; bool in_memory_; - DevToolsNetworkControllerHandle network_controller_handle_; - std::unique_ptr resource_context_; scoped_refptr url_request_getter_; scoped_refptr storage_policy_; diff --git a/brightray/browser/devtools_manager_delegate.cc b/brightray/browser/devtools_manager_delegate.cc index 0e70af7751b..079931fdb36 100644 --- a/brightray/browser/devtools_manager_delegate.cc +++ b/brightray/browser/devtools_manager_delegate.cc @@ -12,7 +12,6 @@ #include "base/strings/string_number_conversions.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" -#include "brightray/browser/net/devtools_network_protocol_handler.h" #include "brightray/common/content_client.h" #include "content/public/browser/devtools_agent_host.h" #include "content/public/browser/devtools_frontend_host.h" @@ -93,9 +92,7 @@ void DevToolsManagerDelegate::StartHttpHandler() { base::FilePath()); } -DevToolsManagerDelegate::DevToolsManagerDelegate() - : handler_(new DevToolsNetworkProtocolHandler) { -} +DevToolsManagerDelegate::DevToolsManagerDelegate() {} DevToolsManagerDelegate::~DevToolsManagerDelegate() { } @@ -107,9 +104,6 @@ bool DevToolsManagerDelegate::HandleCommand( content::DevToolsAgentHost* agent_host, int session_id, base::DictionaryValue* command) { - if (handler_->HandleCommand(agent_host, command)) { - return true; - } return false; } diff --git a/brightray/browser/devtools_manager_delegate.h b/brightray/browser/devtools_manager_delegate.h index e8189161c14..ac779fe1627 100644 --- a/brightray/browser/devtools_manager_delegate.h +++ b/brightray/browser/devtools_manager_delegate.h @@ -13,8 +13,6 @@ namespace brightray { -class DevToolsNetworkProtocolHandler; - class DevToolsManagerDelegate : public content::DevToolsManagerDelegate { public: static void StartHttpHandler(); @@ -34,8 +32,6 @@ class DevToolsManagerDelegate : public content::DevToolsManagerDelegate { std::string GetFrontendResource(const std::string& path) override; private: - std::unique_ptr handler_; - DISALLOW_COPY_AND_ASSIGN(DevToolsManagerDelegate); }; diff --git a/brightray/browser/net/devtools_network_conditions.cc b/brightray/browser/net/devtools_network_conditions.cc deleted file mode 100644 index 7405ed94260..00000000000 --- a/brightray/browser/net/devtools_network_conditions.cc +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "brightray/browser/net/devtools_network_conditions.h" - -namespace brightray { - -DevToolsNetworkConditions::DevToolsNetworkConditions(bool offline) - : offline_(offline), - latency_(0), - download_throughput_(0), - upload_throughput_(0) { -} - -DevToolsNetworkConditions::DevToolsNetworkConditions( - bool offline, - double latency, - double download_throughput, - double upload_throughput) - : offline_(offline), - latency_(latency), - download_throughput_(download_throughput), - upload_throughput_(upload_throughput) { -} - -DevToolsNetworkConditions::~DevToolsNetworkConditions() { -} - -bool DevToolsNetworkConditions::IsThrottling() const { - return !offline_ && ((latency_ != 0.0) || (download_throughput_ != 0.0) || - (upload_throughput_ != 0.0)); -} - -} // namespace brightray diff --git a/brightray/browser/net/devtools_network_conditions.h b/brightray/browser/net/devtools_network_conditions.h deleted file mode 100644 index f9885ba4680..00000000000 --- a/brightray/browser/net/devtools_network_conditions.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef BRIGHTRAY_BROWSER_NET_DEVTOOLS_NETWORK_CONDITIONS_H_ -#define BRIGHTRAY_BROWSER_NET_DEVTOOLS_NETWORK_CONDITIONS_H_ - -#include "base/macros.h" - -namespace brightray { - -class DevToolsNetworkConditions { - public: - explicit DevToolsNetworkConditions(bool offline); - DevToolsNetworkConditions(bool offline, - double latency, - double download_throughput, - double upload_throughput); - ~DevToolsNetworkConditions(); - - bool IsThrottling() const; - - bool offline() const { return offline_; } - double latency() const { return latency_; } - double download_throughput() const { return download_throughput_; } - double upload_throughput() const { return upload_throughput_; } - - private: - const bool offline_; - const double latency_; - const double download_throughput_; - const double upload_throughput_; - - DISALLOW_COPY_AND_ASSIGN(DevToolsNetworkConditions); -}; - -} // namespace brightray - -#endif // BRIGHTRAY_BROWSER_NET_DEVTOOLS_NETWORK_CONDITIONS_H_ diff --git a/brightray/browser/net/devtools_network_controller.cc b/brightray/browser/net/devtools_network_controller.cc deleted file mode 100644 index bd37e61d947..00000000000 --- a/brightray/browser/net/devtools_network_controller.cc +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (c) 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE-CHROMIUM file. - -#include "brightray/browser/net/devtools_network_controller.h" - -#include "base/bind.h" -#include "brightray/browser/net/devtools_network_conditions.h" -#include "brightray/browser/net/devtools_network_interceptor.h" -#include "brightray/browser/net/devtools_network_transaction.h" -#include "content/public/browser/browser_thread.h" - -using content::BrowserThread; - -namespace brightray { - -DevToolsNetworkController::DevToolsNetworkController() - : appcache_interceptor_(new DevToolsNetworkInterceptor) { -} - -DevToolsNetworkController::~DevToolsNetworkController() { -} - -void DevToolsNetworkController::SetNetworkState( - const std::string& client_id, - std::unique_ptr conditions) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); - - auto it = interceptors_.find(client_id); - if (it == interceptors_.end()) { - if (!conditions) - return; - std::unique_ptr new_interceptor( - new DevToolsNetworkInterceptor); - new_interceptor->UpdateConditions(std::move(conditions)); - interceptors_[client_id] = std::move(new_interceptor); - } else { - if (!conditions) { - std::unique_ptr online_conditions( - new DevToolsNetworkConditions(false)); - it->second->UpdateConditions(std::move(online_conditions)); - interceptors_.erase(client_id); - } else { - it->second->UpdateConditions(std::move(conditions)); - } - } - - bool has_offline_interceptors = false; - for (const auto& interceptor : interceptors_) { - if (interceptor.second->IsOffline()) { - has_offline_interceptors = true; - break; - } - } - - bool is_appcache_offline = appcache_interceptor_->IsOffline(); - if (is_appcache_offline != has_offline_interceptors) { - std::unique_ptr appcache_conditions( - new DevToolsNetworkConditions(has_offline_interceptors)); - appcache_interceptor_->UpdateConditions(std::move(appcache_conditions)); - } -} - -DevToolsNetworkInterceptor* -DevToolsNetworkController::GetInterceptor(const std::string& client_id) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); - - if (interceptors_.empty() || client_id.empty()) - return nullptr; - - auto it = interceptors_.find(client_id); - if (it == interceptors_.end()) - return nullptr; - - return it->second.get(); -} - -} // namespace brightray diff --git a/brightray/browser/net/devtools_network_controller.h b/brightray/browser/net/devtools_network_controller.h deleted file mode 100644 index 1ba5bf30869..00000000000 --- a/brightray/browser/net/devtools_network_controller.h +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE-CHROMIUM file. - -#ifndef BRIGHTRAY_BROWSER_NET_DEVTOOLS_NETWORK_CONTROLLER_H_ -#define BRIGHTRAY_BROWSER_NET_DEVTOOLS_NETWORK_CONTROLLER_H_ - -#include -#include -#include - -#include "base/macros.h" -#include "base/threading/thread_checker.h" - -namespace brightray { - -class DevToolsNetworkConditions; -class DevToolsNetworkInterceptor; -class DevToolsNetworkTransaction; - -class DevToolsNetworkController { - public: - DevToolsNetworkController(); - virtual ~DevToolsNetworkController(); - - void SetNetworkState(const std::string& client_id, - std::unique_ptr conditions); - - DevToolsNetworkInterceptor* GetInterceptor(const std::string& client_id); - - private: - using InterceptorMap = - std::unordered_map>; - - std::unique_ptr appcache_interceptor_; - InterceptorMap interceptors_; - - DISALLOW_COPY_AND_ASSIGN(DevToolsNetworkController); -}; - -} // namespace brightray - -#endif // BRIGHTRAY_BROWSER_NET_DEVTOOLS_NETWORK_CONTROLLER_H_ diff --git a/brightray/browser/net/devtools_network_controller_handle.cc b/brightray/browser/net/devtools_network_controller_handle.cc deleted file mode 100644 index 8d167a1e515..00000000000 --- a/brightray/browser/net/devtools_network_controller_handle.cc +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE-CHROMIUM file. - -#include "brightray/browser/net/devtools_network_controller_handle.h" - -#include "base/bind.h" -#include "brightray/browser/net/devtools_network_conditions.h" -#include "brightray/browser/net/devtools_network_controller.h" -#include "content/public/browser/browser_thread.h" - -using content::BrowserThread; - -namespace brightray { - -DevToolsNetworkControllerHandle::DevToolsNetworkControllerHandle() { - DCHECK_CURRENTLY_ON(BrowserThread::UI); -} - -DevToolsNetworkControllerHandle::~DevToolsNetworkControllerHandle() { - BrowserThread::DeleteSoon(BrowserThread::IO, - FROM_HERE, - controller_.release()); -} - -void DevToolsNetworkControllerHandle::SetNetworkState( - const std::string& client_id, - std::unique_ptr conditions) { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - - BrowserThread::PostTask( - BrowserThread::IO, FROM_HERE, - base::Bind(&DevToolsNetworkControllerHandle::SetNetworkStateOnIO, - base::Unretained(this), client_id, base::Passed(&conditions))); -} - -DevToolsNetworkController* DevToolsNetworkControllerHandle::GetController() { - DCHECK_CURRENTLY_ON(BrowserThread::IO); - - LazyInitialize(); - return controller_.get(); -} - -void DevToolsNetworkControllerHandle::LazyInitialize() { - DCHECK_CURRENTLY_ON(BrowserThread::IO); - - if (!controller_) - controller_.reset(new DevToolsNetworkController); -} - -void DevToolsNetworkControllerHandle::SetNetworkStateOnIO( - const std::string& client_id, - std::unique_ptr conditions) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); - - LazyInitialize(); - controller_->SetNetworkState(client_id, std::move(conditions)); -} - -} // namespace brightray diff --git a/brightray/browser/net/devtools_network_controller_handle.h b/brightray/browser/net/devtools_network_controller_handle.h deleted file mode 100644 index cbb89ca25bc..00000000000 --- a/brightray/browser/net/devtools_network_controller_handle.h +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE-CHROMIUM file. - -#ifndef BRIGHTRAY_BROWSER_NET_DEVTOOLS_NETWORK_CONTROLLER_HANDLE_H_ -#define BRIGHTRAY_BROWSER_NET_DEVTOOLS_NETWORK_CONTROLLER_HANDLE_H_ - -#include -#include - -#include "base/macros.h" - -namespace brightray { - -class DevToolsNetworkConditions; -class DevToolsNetworkController; - -// A handle to manage an IO-thread DevToolsNetworkController on the IO thread -// while allowing SetNetworkState to be called from the UI thread. -class DevToolsNetworkControllerHandle { - public: - DevToolsNetworkControllerHandle(); - ~DevToolsNetworkControllerHandle(); - - // Called on the UI thread. - void SetNetworkState(const std::string& client_id, - std::unique_ptr conditions); - - // Called on the IO thread. - DevToolsNetworkController* GetController(); - - private: - void LazyInitialize(); - void SetNetworkStateOnIO( - const std::string& client_id, - std::unique_ptr conditions); - - std::unique_ptr controller_; - - DISALLOW_COPY_AND_ASSIGN(DevToolsNetworkControllerHandle); -}; - -} // namespace brightray - -#endif // BRIGHTRAY_BROWSER_NET_DEVTOOLS_NETWORK_CONTROLLER_HANDLE_H_ diff --git a/brightray/browser/net/devtools_network_interceptor.cc b/brightray/browser/net/devtools_network_interceptor.cc deleted file mode 100644 index 8fec4c45db4..00000000000 --- a/brightray/browser/net/devtools_network_interceptor.cc +++ /dev/null @@ -1,293 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "brightray/browser/net/devtools_network_interceptor.h" - -#include -#include - -#include "base/time/time.h" -#include "brightray/browser/net/devtools_network_conditions.h" -#include "net/base/net_errors.h" - -namespace brightray { - -namespace { - -int64_t kPacketSize = 1500; - -base::TimeDelta CalculateTickLength(double throughput) { - if (!throughput) - return base::TimeDelta(); - - int64_t us_tick_length = (1000000L * kPacketSize) / throughput; - if (us_tick_length == 0) - us_tick_length = 1; - return base::TimeDelta::FromMicroseconds(us_tick_length); -} - -} // namespace - -DevToolsNetworkInterceptor::ThrottleRecord::ThrottleRecord() { -} - -DevToolsNetworkInterceptor::ThrottleRecord::ThrottleRecord( - const ThrottleRecord& other) = default; - -DevToolsNetworkInterceptor::ThrottleRecord::~ThrottleRecord() { -} - -DevToolsNetworkInterceptor::DevToolsNetworkInterceptor() - : conditions_(new DevToolsNetworkConditions(false)), - download_last_tick_(0), - upload_last_tick_(0), - weak_ptr_factory_(this) { -} - -DevToolsNetworkInterceptor::~DevToolsNetworkInterceptor() { -} - -base::WeakPtr -DevToolsNetworkInterceptor::GetWeakPtr() { - return weak_ptr_factory_.GetWeakPtr(); -} - -void DevToolsNetworkInterceptor::FinishRecords( - ThrottleRecords* records, bool offline) { - ThrottleRecords temp; - temp.swap(*records); - for (const ThrottleRecord& record : temp) { - bool failed = offline && !record.is_upload; - record.callback.Run( - failed ? net::ERR_INTERNET_DISCONNECTED : record.result, - record.bytes); - } -} - -void DevToolsNetworkInterceptor::UpdateConditions( - std::unique_ptr conditions) { - DCHECK(conditions); - base::TimeTicks now = base::TimeTicks::Now(); - if (conditions_->IsThrottling()) - UpdateThrottled(now); - - conditions_ = std::move(conditions); - - bool offline = conditions_->offline(); - if (offline || !conditions_->IsThrottling()) { - timer_.Stop(); - FinishRecords(&download_, offline); - FinishRecords(&upload_, offline); - FinishRecords(&suspended_, offline); - return; - } - - // Throttling. - DCHECK(conditions_->download_throughput() != 0 || - conditions_->upload_throughput() != 0); - offset_ = now; - - download_last_tick_ = 0; - download_tick_length_ = CalculateTickLength( - conditions_->download_throughput()); - - upload_last_tick_ = 0; - upload_tick_length_ = CalculateTickLength(conditions_->upload_throughput()); - - latency_length_ = base::TimeDelta(); - double latency = conditions_->latency(); - if (latency > 0) - latency_length_ = base::TimeDelta::FromMillisecondsD(latency); - ArmTimer(now); -} - -uint64_t DevToolsNetworkInterceptor::UpdateThrottledRecords( - base::TimeTicks now, - ThrottleRecords* records, - uint64_t last_tick, - base::TimeDelta tick_length) { - if (tick_length.is_zero()) { - DCHECK(records->empty()); - return last_tick; - } - - int64_t new_tick = (now - offset_) / tick_length; - int64_t ticks = new_tick - last_tick; - - int64_t length = records->size(); - if (!length) - return new_tick; - - int64_t shift = ticks % length; - for (int64_t i = 0; i < length; ++i) { - (*records)[i].bytes -= - (ticks / length) * kPacketSize + (i < shift ? kPacketSize : 0); - } - std::rotate(records->begin(), records->begin() + shift, records->end()); - return new_tick; -} - -void DevToolsNetworkInterceptor::UpdateThrottled(base::TimeTicks now) { - download_last_tick_ = UpdateThrottledRecords( - now, &download_, download_last_tick_, download_tick_length_); - upload_last_tick_ = UpdateThrottledRecords( - now, &upload_, upload_last_tick_, upload_tick_length_); - UpdateSuspended(now); -} - -void DevToolsNetworkInterceptor::UpdateSuspended(base::TimeTicks now) { - int64_t activation_baseline = - (now - latency_length_ - base::TimeTicks()).InMicroseconds(); - ThrottleRecords suspended; - for (const ThrottleRecord& record : suspended_) { - if (record.send_end <= activation_baseline) { - if (record.is_upload) - upload_.push_back(record); - else - download_.push_back(record); - } else { - suspended.push_back(record); - } - } - suspended_.swap(suspended); -} - -void DevToolsNetworkInterceptor::CollectFinished( - ThrottleRecords* records, ThrottleRecords* finished) { - ThrottleRecords active; - for (const ThrottleRecord& record : *records) { - if (record.bytes < 0) - finished->push_back(record); - else - active.push_back(record); - } - records->swap(active); -} - -void DevToolsNetworkInterceptor::OnTimer() { - base::TimeTicks now = base::TimeTicks::Now(); - UpdateThrottled(now); - - ThrottleRecords finished; - CollectFinished(&download_, &finished); - CollectFinished(&upload_, &finished); - for (const ThrottleRecord& record : finished) - record.callback.Run(record.result, record.bytes); - - ArmTimer(now); -} - -base::TimeTicks DevToolsNetworkInterceptor::CalculateDesiredTime( - const ThrottleRecords& records, - uint64_t last_tick, - base::TimeDelta tick_length) { - int64_t min_ticks_left = 0x10000L; - size_t count = records.size(); - for (size_t i = 0; i < count; ++i) { - int64_t packets_left = (records[i].bytes + kPacketSize - 1) / kPacketSize; - int64_t ticks_left = (i + 1) + count * (packets_left - 1); - if (i == 0 || ticks_left < min_ticks_left) - min_ticks_left = ticks_left; - } - return offset_ + tick_length * (last_tick + min_ticks_left); -} - -void DevToolsNetworkInterceptor::ArmTimer(base::TimeTicks now) { - size_t suspend_count = suspended_.size(); - if (download_.empty() && upload_.empty() && !suspend_count) { - timer_.Stop(); - return; - } - - base::TimeTicks desired_time = CalculateDesiredTime( - download_, download_last_tick_, download_tick_length_); - if (desired_time == offset_) { - FinishRecords(&download_, false); - } - - base::TimeTicks upload_time = CalculateDesiredTime( - upload_, upload_last_tick_, upload_tick_length_); - if (upload_time != offset_ && upload_time < desired_time) - desired_time = upload_time; - - int64_t min_baseline = std::numeric_limits::max(); - for (size_t i = 0; i < suspend_count; ++i) { - if (suspended_[i].send_end < min_baseline) - min_baseline = suspended_[i].send_end; - } - if (suspend_count) { - base::TimeTicks activation_time = base::TimeTicks() + - base::TimeDelta::FromMicroseconds(min_baseline) + latency_length_; - if (activation_time < desired_time) - desired_time = activation_time; - } - - timer_.Start( - FROM_HERE, (desired_time - now).magnitude(), - base::Bind(&DevToolsNetworkInterceptor::OnTimer, base::Unretained(this))); -} - -int DevToolsNetworkInterceptor::StartThrottle( - int result, - int64_t bytes, - base::TimeTicks send_end, - bool start, - bool is_upload, - const ThrottleCallback& callback) { - if (result < 0) - return result; - - if (conditions_->offline()) - return is_upload ? result : net::ERR_INTERNET_DISCONNECTED; - - if ((is_upload && !conditions_->upload_throughput()) || - (!is_upload && !conditions_->download_throughput())) { - return result; - } - - ThrottleRecord record; - record.result = result; - record.bytes = bytes; - record.callback = callback; - record.is_upload = is_upload; - - base::TimeTicks now = base::TimeTicks::Now(); - UpdateThrottled(now); - if (start && latency_length_ != base::TimeDelta()) { - record.send_end = (send_end - base::TimeTicks()).InMicroseconds(); - suspended_.push_back(record); - UpdateSuspended(now); - } else { - if (is_upload) - upload_.push_back(record); - else - download_.push_back(record); - } - ArmTimer(now); - - return net::ERR_IO_PENDING; -} - -void DevToolsNetworkInterceptor::StopThrottle( - const ThrottleCallback& callback) { - RemoveRecord(&download_, callback); - RemoveRecord(&upload_, callback); - RemoveRecord(&suspended_, callback); -} - -void DevToolsNetworkInterceptor::RemoveRecord( - ThrottleRecords* records, const ThrottleCallback& callback) { - records->erase( - std::remove_if(records->begin(), records->end(), - [&callback](const ThrottleRecord& record){ - return record.callback.Equals(callback); - }), - records->end()); -} - -bool DevToolsNetworkInterceptor::IsOffline() { - return conditions_->offline(); -} - -} // namespace brightray diff --git a/brightray/browser/net/devtools_network_interceptor.h b/brightray/browser/net/devtools_network_interceptor.h deleted file mode 100644 index 08f5f672164..00000000000 --- a/brightray/browser/net/devtools_network_interceptor.h +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef BRIGHTRAY_BROWSER_NET_DEVTOOLS_NETWORK_INTERCEPTOR_H_ -#define BRIGHTRAY_BROWSER_NET_DEVTOOLS_NETWORK_INTERCEPTOR_H_ - -#include -#include -#include - -#include "base/macros.h" -#include "base/timer/timer.h" - -namespace base { -class TimeDelta; -class TimeTicks; -} - -namespace brightray { - -class DevToolsNetworkConditions; -class DevToolsNetworkTransaction; - -class DevToolsNetworkInterceptor { - public: - using ThrottleCallback = base::Callback; - - DevToolsNetworkInterceptor(); - virtual ~DevToolsNetworkInterceptor(); - - base::WeakPtr GetWeakPtr(); - - // Applies network emulation configuration. - void UpdateConditions(std::unique_ptr conditions); - - // Throttles with |is_upload == true| always succeed, even in offline mode. - int StartThrottle(int result, - int64_t bytes, - base::TimeTicks send_end, - bool start, - bool is_upload, - const ThrottleCallback& callback); - void StopThrottle(const ThrottleCallback& callback); - - bool IsOffline(); - - private: - struct ThrottleRecord { - public: - ThrottleRecord(); - ThrottleRecord(const ThrottleRecord& other); - ~ThrottleRecord(); - - int result; - int64_t bytes; - int64_t send_end; - bool is_upload; - ThrottleCallback callback; - }; - - using ThrottleRecords = std::vector; - - void FinishRecords(ThrottleRecords* records, bool offline); - - uint64_t UpdateThrottledRecords(base::TimeTicks now, - ThrottleRecords* records, - uint64_t last_tick, - base::TimeDelta tick_length); - void UpdateThrottled(base::TimeTicks now); - void UpdateSuspended(base::TimeTicks now); - - void CollectFinished(ThrottleRecords* records, ThrottleRecords* finished); - void OnTimer(); - - base::TimeTicks CalculateDesiredTime(const ThrottleRecords& records, - uint64_t last_tick, - base::TimeDelta tick_length); - void ArmTimer(base::TimeTicks now); - - void RemoveRecord(ThrottleRecords* records, const ThrottleCallback& callback); - - std::unique_ptr conditions_; - - // Throttables suspended for a "latency" period. - ThrottleRecords suspended_; - - // Throttables waiting for certain amount of transfer to be "accounted". - ThrottleRecords download_; - ThrottleRecords upload_; - - base::OneShotTimer timer_; - base::TimeTicks offset_; - base::TimeDelta download_tick_length_; - base::TimeDelta upload_tick_length_; - base::TimeDelta latency_length_; - uint64_t download_last_tick_; - uint64_t upload_last_tick_; - - base::WeakPtrFactory weak_ptr_factory_; - - DISALLOW_COPY_AND_ASSIGN(DevToolsNetworkInterceptor); -}; - -} // namespace brightray - -#endif // BRIGHTRAY_BROWSER_NET_DEVTOOLS_NETWORK_INTERCEPTOR_H_ diff --git a/brightray/browser/net/devtools_network_protocol_handler.cc b/brightray/browser/net/devtools_network_protocol_handler.cc deleted file mode 100644 index caf738435fd..00000000000 --- a/brightray/browser/net/devtools_network_protocol_handler.cc +++ /dev/null @@ -1,173 +0,0 @@ -// Copyright (c) 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE-CHROMIUM file. - -#include "brightray/browser/net/devtools_network_protocol_handler.h" - -#include -#include - -#include "base/memory/ptr_util.h" -#include "base/strings/stringprintf.h" -#include "brightray/browser/browser_context.h" -#include "brightray/browser/net/devtools_network_conditions.h" -#include "brightray/browser/net/devtools_network_controller.h" -#include "content/public/browser/browser_thread.h" -#include "content/public/browser/devtools_agent_host.h" - -namespace brightray { - -namespace { - -namespace params { - -const char kDownloadThroughput[] = "downloadThroughput"; -const char kLatency[] = "latency"; -const char kOffline[] = "offline"; -const char kUploadThroughput[] = "uploadThroughput"; -const char kResult[] = "result"; -const char kErrorCode[] = "code"; -const char kErrorMessage[] = "message"; - -} // namespace params - -const char kEmulateNetworkConditions[] = "Network.emulateNetworkConditions"; -const char kCanEmulateNetworkConditions[] = - "Network.canEmulateNetworkConditions"; -const char kId[] = "id"; -const char kMethod[] = "method"; -const char kParams[] = "params"; -const char kError[] = "error"; -// JSON RPC 2.0 spec: http://www.jsonrpc.org/specification#error_object -const int kErrorInvalidParams = -32602; - -bool ParseCommand(const base::DictionaryValue* command, - int* id, - std::string* method, - const base::DictionaryValue** params) { - if (!command) - return false; - - if (!command->GetInteger(kId, id) || *id < 0) - return false; - - if (!command->GetString(kMethod, method)) - return false; - - if (!command->GetDictionary(kParams, params)) - *params = nullptr; - - return true; -} - -std::unique_ptr -CreateSuccessResponse(int id, std::unique_ptr result) { - auto response = base::MakeUnique(); - response->SetInteger(kId, id); - response->Set(params::kResult, std::move(result)); - return response; -} - -std::unique_ptr -CreateFailureResponse(int id, const std::string& param) { - auto response = base::MakeUnique(); - auto error_object = base::MakeUnique(); - error_object->SetInteger(params::kErrorCode, kErrorInvalidParams); - error_object->SetString(params::kErrorMessage, - base::StringPrintf("Missing or Invalid '%s' parameter", param.c_str())); - response->Set(kError, std::move(error_object)); - return response; -} - -} // namespace - -DevToolsNetworkProtocolHandler::DevToolsNetworkProtocolHandler() { -} - -DevToolsNetworkProtocolHandler::~DevToolsNetworkProtocolHandler() { -} - -base::DictionaryValue* DevToolsNetworkProtocolHandler::HandleCommand( - content::DevToolsAgentHost* agent_host, - base::DictionaryValue* command) { - int id = 0; - std::string method; - const base::DictionaryValue* params = nullptr; - - if (!ParseCommand(command, &id, &method, ¶ms)) - return nullptr; - - if (method == kEmulateNetworkConditions) - return EmulateNetworkConditions(agent_host, id, params).release(); - - if (method == kCanEmulateNetworkConditions) - return CanEmulateNetworkConditions(agent_host, id, params).release(); - - return nullptr; -} - -void DevToolsNetworkProtocolHandler::DevToolsAgentStateChanged( - content::DevToolsAgentHost* agent_host, - bool attached) { - std::unique_ptr conditions; - if (attached) - conditions.reset(new DevToolsNetworkConditions(false)); - UpdateNetworkState(agent_host, std::move(conditions)); -} - -std::unique_ptr -DevToolsNetworkProtocolHandler::CanEmulateNetworkConditions( - content::DevToolsAgentHost* agent_host, - int id, - const base::DictionaryValue* params) { - std::unique_ptr result(new base::DictionaryValue); - result->SetBoolean(params::kResult, true); - return CreateSuccessResponse(id, std::move(result)); -} - -std::unique_ptr -DevToolsNetworkProtocolHandler::EmulateNetworkConditions( - content::DevToolsAgentHost* agent_host, - int id, - const base::DictionaryValue* params) { - bool offline = false; - if (!params || !params->GetBoolean(params::kOffline, &offline)) - return CreateFailureResponse(id, params::kOffline); - - double latency = 0.0; - if (!params->GetDouble(params::kLatency, &latency)) - return CreateFailureResponse(id, params::kLatency); - if (latency < 0.0) - latency = 0.0; - - double download_throughput = 0.0; - if (!params->GetDouble(params::kDownloadThroughput, &download_throughput)) - return CreateFailureResponse(id, params::kDownloadThroughput); - if (download_throughput < 0.0) - download_throughput = 0.0; - - double upload_throughput = 0.0; - if (!params->GetDouble(params::kUploadThroughput, &upload_throughput)) - return CreateFailureResponse(id, params::kUploadThroughput); - if (upload_throughput < 0.0) - upload_throughput = 0.0; - - std::unique_ptr conditions( - new DevToolsNetworkConditions(offline, - latency, - download_throughput, - upload_throughput)); - UpdateNetworkState(agent_host, std::move(conditions)); - return std::unique_ptr(); -} - -void DevToolsNetworkProtocolHandler::UpdateNetworkState( - content::DevToolsAgentHost* agent_host, - std::unique_ptr conditions) { - auto browser_context = - static_cast(agent_host->GetBrowserContext()); - browser_context->network_controller_handle()->SetNetworkState( - agent_host->GetId(), std::move(conditions)); -} - -} // namespace brightray diff --git a/brightray/browser/net/devtools_network_protocol_handler.h b/brightray/browser/net/devtools_network_protocol_handler.h deleted file mode 100644 index 8efa3468fe1..00000000000 --- a/brightray/browser/net/devtools_network_protocol_handler.h +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef BRIGHTRAY_BROWSER_NET_DEVTOOLS_NETWORK_PROTOCOL_HANDLER_H_ -#define BRIGHTRAY_BROWSER_NET_DEVTOOLS_NETWORK_PROTOCOL_HANDLER_H_ - -#include "base/macros.h" -#include "base/values.h" - -namespace content { -class DevToolsAgentHost; -} - -namespace brightray { - -class DevToolsNetworkConditions; - -class DevToolsNetworkProtocolHandler { - public: - DevToolsNetworkProtocolHandler(); - ~DevToolsNetworkProtocolHandler(); - - base::DictionaryValue* HandleCommand( - content::DevToolsAgentHost* agent_host, - base::DictionaryValue* command); - void DevToolsAgentStateChanged(content::DevToolsAgentHost* agent_host, - bool attached); - - private: - std::unique_ptr CanEmulateNetworkConditions( - content::DevToolsAgentHost* agent_host, - int command_id, - const base::DictionaryValue* params); - std::unique_ptr EmulateNetworkConditions( - content::DevToolsAgentHost* agent_host, - int command_id, - const base::DictionaryValue* params); - void UpdateNetworkState( - content::DevToolsAgentHost* agent_host, - std::unique_ptr conditions); - - DISALLOW_COPY_AND_ASSIGN(DevToolsNetworkProtocolHandler); -}; - -} // namespace brightray - -#endif // BRIGHTRAY_BROWSER_NET_DEVTOOLS_NETWORK_PROTOCOL_HANDLER_H_ diff --git a/brightray/browser/net/devtools_network_transaction.cc b/brightray/browser/net/devtools_network_transaction.cc deleted file mode 100644 index 1c18ad17120..00000000000 --- a/brightray/browser/net/devtools_network_transaction.cc +++ /dev/null @@ -1,302 +0,0 @@ -// Copyright (c) 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE-CHROMIUM file. - -#include "brightray/browser/net/devtools_network_transaction.h" - -#include -#include - -#include "brightray/browser/net/devtools_network_controller.h" -#include "brightray/browser/net/devtools_network_upload_data_stream.h" -#include "net/base/load_timing_info.h" -#include "net/base/net_errors.h" -#include "net/base/upload_progress.h" -#include "net/http/http_network_transaction.h" -#include "net/http/http_request_info.h" -#include "net/socket/connection_attempts.h" - -namespace brightray { - -// static -const char - DevToolsNetworkTransaction::kDevToolsEmulateNetworkConditionsClientId[] = - "X-DevTools-Emulate-Network-Conditions-Client-Id"; - -DevToolsNetworkTransaction::DevToolsNetworkTransaction( - DevToolsNetworkController* controller, - std::unique_ptr transaction) - : throttled_byte_count_(0), - controller_(controller), - transaction_(std::move(transaction)), - request_(nullptr), - failed_(false) { - DCHECK(controller); -} - -DevToolsNetworkTransaction::~DevToolsNetworkTransaction() { - if (interceptor_ && !throttle_callback_.is_null()) - interceptor_->StopThrottle(throttle_callback_); -} - -void DevToolsNetworkTransaction::IOCallback( - const net::CompletionCallback& callback, bool start, int result) { - result = Throttle(callback, start, result); - if (result != net::ERR_IO_PENDING) - callback.Run(result); -} - -int DevToolsNetworkTransaction::Throttle( - const net::CompletionCallback& callback, bool start, int result) { - if (failed_) - return net::ERR_INTERNET_DISCONNECTED; - if (!interceptor_ || result < 0) - return result; - - base::TimeTicks send_end; - if (start) { - throttled_byte_count_ += transaction_->GetTotalReceivedBytes(); - net::LoadTimingInfo load_timing_info; - if (GetLoadTimingInfo(&load_timing_info)) - send_end = load_timing_info.send_end; - if (send_end.is_null()) - send_end = base::TimeTicks::Now(); - } - if (result > 0) - throttled_byte_count_ += result; - - throttle_callback_ = base::Bind(&DevToolsNetworkTransaction::ThrottleCallback, - base::Unretained(this), - callback); - int rv = interceptor_->StartThrottle(result, throttled_byte_count_, send_end, - start, false, throttle_callback_); - if (rv != net::ERR_IO_PENDING) - throttle_callback_.Reset(); - if (rv == net::ERR_INTERNET_DISCONNECTED) - Fail(); - return rv; -} - -void DevToolsNetworkTransaction::ThrottleCallback( - const net::CompletionCallback& callback, int result, int64_t bytes) { - DCHECK(!throttle_callback_.is_null()); - throttle_callback_.Reset(); - if (result == net::ERR_INTERNET_DISCONNECTED) - Fail(); - throttled_byte_count_ = bytes; - callback.Run(result); -} - -void DevToolsNetworkTransaction::Fail() { - DCHECK(request_); - DCHECK(!failed_); - failed_ = true; - transaction_->SetBeforeNetworkStartCallback(BeforeNetworkStartCallback()); - if (interceptor_) - interceptor_.reset(); -} - -bool DevToolsNetworkTransaction::CheckFailed() { - if (failed_) - return true; - if (interceptor_ && interceptor_->IsOffline()) { - Fail(); - return true; - } - return false; -} - -int DevToolsNetworkTransaction::Start(const net::HttpRequestInfo* request, - const net::CompletionCallback& callback, - const net::NetLogWithSource& net_log) { - DCHECK(request); - request_ = request; - - std::string client_id; - bool has_devtools_client_id = request_->extra_headers.HasHeader( - kDevToolsEmulateNetworkConditionsClientId); - if (has_devtools_client_id) { - custom_request_.reset(new net::HttpRequestInfo(*request_)); - custom_request_->extra_headers.GetHeader( - kDevToolsEmulateNetworkConditionsClientId, &client_id); - custom_request_->extra_headers.RemoveHeader( - kDevToolsEmulateNetworkConditionsClientId); - - if (request_->upload_data_stream) { - custom_upload_data_stream_.reset( - new DevToolsNetworkUploadDataStream(request_->upload_data_stream)); - custom_request_->upload_data_stream = custom_upload_data_stream_.get(); - } - - request_ = custom_request_.get(); - } - - DevToolsNetworkInterceptor* interceptor = - controller_->GetInterceptor(client_id); - if (interceptor) { - interceptor_ = interceptor->GetWeakPtr(); - if (custom_upload_data_stream_) - custom_upload_data_stream_->SetInterceptor(interceptor); - } - - if (CheckFailed()) - return net::ERR_INTERNET_DISCONNECTED; - - if (!interceptor_) - return transaction_->Start(request_, callback, net_log); - - int result = transaction_->Start(request_, - base::Bind(&DevToolsNetworkTransaction::IOCallback, - base::Unretained(this), callback, true), - net_log); - return Throttle(callback, true, result); -} - -int DevToolsNetworkTransaction::RestartIgnoringLastError( - const net::CompletionCallback& callback) { - if (CheckFailed()) - return net::ERR_INTERNET_DISCONNECTED; - if (!interceptor_) - return transaction_->RestartIgnoringLastError(callback); - - int result = transaction_->RestartIgnoringLastError( - base::Bind(&DevToolsNetworkTransaction::IOCallback, - base::Unretained(this), callback, true)); - return Throttle(callback, true, result); -} - -int DevToolsNetworkTransaction::RestartWithCertificate( - scoped_refptr client_cert, - scoped_refptr client_private_key, - const net::CompletionCallback& callback) { - if (CheckFailed()) - return net::ERR_INTERNET_DISCONNECTED; - if (!interceptor_) { - return transaction_->RestartWithCertificate( - std::move(client_cert), std::move(client_private_key), callback); - } - - int result = transaction_->RestartWithCertificate( - std::move(client_cert), std::move(client_private_key), - base::Bind(&DevToolsNetworkTransaction::IOCallback, - base::Unretained(this), callback, true)); - return Throttle(callback, true, result); -} - -int DevToolsNetworkTransaction::RestartWithAuth( - const net::AuthCredentials& credentials, - const net::CompletionCallback& callback) { - if (CheckFailed()) - return net::ERR_INTERNET_DISCONNECTED; - if (!interceptor_) - return transaction_->RestartWithAuth(credentials, callback); - - int result = transaction_->RestartWithAuth(credentials, - base::Bind(&DevToolsNetworkTransaction::IOCallback, - base::Unretained(this), callback, true)); - return Throttle(callback, true, result); -} - -bool DevToolsNetworkTransaction::IsReadyToRestartForAuth() { - return transaction_->IsReadyToRestartForAuth(); -} - -int DevToolsNetworkTransaction::Read( - net::IOBuffer* buf, - int buf_len, - const net::CompletionCallback& callback) { - if (CheckFailed()) - return net::ERR_INTERNET_DISCONNECTED; - if (!interceptor_) - return transaction_->Read(buf, buf_len, callback); - - int result = transaction_->Read(buf, buf_len, - base::Bind(&DevToolsNetworkTransaction::IOCallback, - base::Unretained(this), callback, false)); - // URLRequestJob relies on synchronous end-of-stream notification. - if (result == 0) - return result; - return Throttle(callback, false, result); -} - -void DevToolsNetworkTransaction::StopCaching() { - transaction_->StopCaching(); -} - -bool DevToolsNetworkTransaction::GetFullRequestHeaders( - net::HttpRequestHeaders* headers) const { - return transaction_->GetFullRequestHeaders(headers); -} - -int64_t DevToolsNetworkTransaction::GetTotalReceivedBytes() const { - return transaction_->GetTotalReceivedBytes(); -} - -int64_t DevToolsNetworkTransaction::GetTotalSentBytes() const { - return transaction_->GetTotalSentBytes(); -} - -void DevToolsNetworkTransaction::DoneReading() { - transaction_->DoneReading(); -} - -const net::HttpResponseInfo* -DevToolsNetworkTransaction::GetResponseInfo() const { - return transaction_->GetResponseInfo(); -} - -net::LoadState DevToolsNetworkTransaction::GetLoadState() const { - return transaction_->GetLoadState(); -} - -void DevToolsNetworkTransaction::SetQuicServerInfo( - net::QuicServerInfo* info) { - transaction_->SetQuicServerInfo(info); -} - -bool DevToolsNetworkTransaction::GetLoadTimingInfo( - net::LoadTimingInfo* info) const { - return transaction_->GetLoadTimingInfo(info); -} - -bool DevToolsNetworkTransaction::GetRemoteEndpoint( - net::IPEndPoint* endpoint) const { - return transaction_->GetRemoteEndpoint(endpoint); -} - -void DevToolsNetworkTransaction::PopulateNetErrorDetails( - net::NetErrorDetails* details) const { - return transaction_->PopulateNetErrorDetails(details); -} - -void DevToolsNetworkTransaction::SetPriority(net::RequestPriority priority) { - transaction_->SetPriority(priority); -} - -void DevToolsNetworkTransaction::SetWebSocketHandshakeStreamCreateHelper( - net::WebSocketHandshakeStreamBase::CreateHelper* helper) { - transaction_->SetWebSocketHandshakeStreamCreateHelper(helper); -} - -void DevToolsNetworkTransaction::SetBeforeNetworkStartCallback( - const BeforeNetworkStartCallback& callback) { - transaction_->SetBeforeNetworkStartCallback(callback); -} - -void DevToolsNetworkTransaction::SetBeforeHeadersSentCallback( - const BeforeHeadersSentCallback& callback) { - transaction_->SetBeforeHeadersSentCallback(callback); -} - -int DevToolsNetworkTransaction::ResumeNetworkStart() { - if (CheckFailed()) - return net::ERR_INTERNET_DISCONNECTED; - return transaction_->ResumeNetworkStart(); -} - -void DevToolsNetworkTransaction::GetConnectionAttempts( - net::ConnectionAttempts* out) const { - transaction_->GetConnectionAttempts(out); -} - -} // namespace brightray diff --git a/brightray/browser/net/devtools_network_transaction.h b/brightray/browser/net/devtools_network_transaction.h deleted file mode 100644 index d7317e47ac4..00000000000 --- a/brightray/browser/net/devtools_network_transaction.h +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef BRIGHTRAY_BROWSER_NET_DEVTOOLS_NETWORK_TRANSACTION_H_ -#define BRIGHTRAY_BROWSER_NET_DEVTOOLS_NETWORK_TRANSACTION_H_ - -#include - -#include "base/memory/weak_ptr.h" -#include "brightray/browser/net/devtools_network_interceptor.h" -#include "net/base/completion_callback.h" -#include "net/base/load_states.h" -#include "net/base/request_priority.h" -#include "net/http/http_raw_request_headers.h" -#include "net/http/http_transaction.h" - -namespace brightray { - -class DevToolsNetworkController; -class DevToolsNetworkUploadDataStream; - -class DevToolsNetworkTransaction : public net::HttpTransaction { - public: - static const char kDevToolsEmulateNetworkConditionsClientId[]; - - DevToolsNetworkTransaction( - DevToolsNetworkController* controller, - std::unique_ptr network_transaction); - ~DevToolsNetworkTransaction() override; - - // HttpTransaction methods: - int Start(const net::HttpRequestInfo* request, - const net::CompletionCallback& callback, - const net::NetLogWithSource& net_log) override; - int RestartIgnoringLastError( - const net::CompletionCallback& callback) override; - int RestartWithCertificate( - scoped_refptr client_cert, - scoped_refptr client_private_key, - const net::CompletionCallback& callback) override; - int RestartWithAuth(const net::AuthCredentials& credentials, - const net::CompletionCallback& callback) override; - bool IsReadyToRestartForAuth() override; - - int Read(net::IOBuffer* buf, - int buf_len, - const net::CompletionCallback& callback) override; - void StopCaching() override; - bool GetFullRequestHeaders(net::HttpRequestHeaders* headers) const override; - int64_t GetTotalReceivedBytes() const override; - int64_t GetTotalSentBytes() const override; - void DoneReading() override; - const net::HttpResponseInfo* GetResponseInfo() const override; - net::LoadState GetLoadState() const override; - void SetQuicServerInfo(net::QuicServerInfo* quic_server_info) override; - bool GetLoadTimingInfo(net::LoadTimingInfo* load_timing_info) const override; - bool GetRemoteEndpoint(net::IPEndPoint* endpoint) const override; - void PopulateNetErrorDetails(net::NetErrorDetails* details) const override; - void SetPriority(net::RequestPriority priority) override; - void SetWebSocketHandshakeStreamCreateHelper( - net::WebSocketHandshakeStreamBase::CreateHelper* create_helper) override; - void SetBeforeNetworkStartCallback( - const BeforeNetworkStartCallback& callback) override; - void SetBeforeHeadersSentCallback( - const BeforeHeadersSentCallback& callback) override; - int ResumeNetworkStart() override; - void GetConnectionAttempts(net::ConnectionAttempts* out) const override; - - // FIXME(torycl) Implement these methods properly - void SetRequestHeadersCallback(net::RequestHeadersCallback callback) {} - void SetResponseHeadersCallback(net::ResponseHeadersCallback callback) {} - - private: - void Fail(); - bool CheckFailed(); - - void IOCallback(const net::CompletionCallback& callback, - bool start, - int result); - int Throttle(const net::CompletionCallback& callback, - bool start, - int result); - void ThrottleCallback(const net::CompletionCallback& callback, - int result, - int64_t bytes); - - DevToolsNetworkInterceptor::ThrottleCallback throttle_callback_; - int64_t throttled_byte_count_; - - DevToolsNetworkController* controller_; - base::WeakPtr interceptor_; - - // Modified upload data stream. Should be destructed after |custom_request_|. - std::unique_ptr custom_upload_data_stream_; - - // Modified request. Should be destructed after |transaction_|. - std::unique_ptr custom_request_; - - // Original network transaction. - std::unique_ptr transaction_; - - const net::HttpRequestInfo* request_; - - // True if Fail was already invoked. - bool failed_; - - DISALLOW_COPY_AND_ASSIGN(DevToolsNetworkTransaction); -}; - -} // namespace brightray - -#endif // BRIGHTRAY_BROWSER_NET_DEVTOOLS_NETWORK_TRANSACTION_H_ diff --git a/brightray/browser/net/devtools_network_transaction_factory.cc b/brightray/browser/net/devtools_network_transaction_factory.cc deleted file mode 100644 index 98c7bb57e8a..00000000000 --- a/brightray/browser/net/devtools_network_transaction_factory.cc +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE-CHROMIUM file. - -#include "brightray/browser/net/devtools_network_transaction_factory.h" - -#include -#include - -#include "brightray/browser/net/devtools_network_controller.h" -#include "brightray/browser/net/devtools_network_transaction.h" -#include "content/public/browser/service_worker_context.h" -#include "net/base/net_errors.h" -#include "net/http/http_network_layer.h" -#include "net/http/http_network_transaction.h" - -namespace brightray { - -DevToolsNetworkTransactionFactory::DevToolsNetworkTransactionFactory( - DevToolsNetworkController* controller, - net::HttpNetworkSession* session) - : controller_(controller), - network_layer_(new net::HttpNetworkLayer(session)) { - std::set headers; - headers.insert( - DevToolsNetworkTransaction::kDevToolsEmulateNetworkConditionsClientId); - content::ServiceWorkerContext::AddExcludedHeadersForFetchEvent(headers); -} - -DevToolsNetworkTransactionFactory::~DevToolsNetworkTransactionFactory() { -} - -int DevToolsNetworkTransactionFactory::CreateTransaction( - net::RequestPriority priority, - std::unique_ptr* transaction) { - std::unique_ptr new_transaction; - int rv = network_layer_->CreateTransaction(priority, &new_transaction); - if (rv != net::OK) - return rv; - transaction->reset( - new DevToolsNetworkTransaction(controller_, std::move(new_transaction))); - return net::OK; -} - -net::HttpCache* DevToolsNetworkTransactionFactory::GetCache() { - return network_layer_->GetCache(); -} - -net::HttpNetworkSession* DevToolsNetworkTransactionFactory::GetSession() { - return network_layer_->GetSession(); -} - -} // namespace brightray diff --git a/brightray/browser/net/devtools_network_transaction_factory.h b/brightray/browser/net/devtools_network_transaction_factory.h deleted file mode 100644 index e303cc24362..00000000000 --- a/brightray/browser/net/devtools_network_transaction_factory.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE-CHROMIUM file. - -#ifndef BRIGHTRAY_BROWSER_NET_DEVTOOLS_NETWORK_TRANSACTION_FACTORY_H_ -#define BRIGHTRAY_BROWSER_NET_DEVTOOLS_NETWORK_TRANSACTION_FACTORY_H_ - -#include "base/macros.h" -#include "net/base/request_priority.h" -#include "net/http/http_transaction_factory.h" - -namespace brightray { - -class DevToolsNetworkController; - -class DevToolsNetworkTransactionFactory : public net::HttpTransactionFactory { - public: - explicit DevToolsNetworkTransactionFactory( - DevToolsNetworkController* controller, - net::HttpNetworkSession* session); - ~DevToolsNetworkTransactionFactory() override; - - // net::HttpTransactionFactory: - int CreateTransaction( - net::RequestPriority priority, - std::unique_ptr* transaction) override; - net::HttpCache* GetCache() override; - net::HttpNetworkSession* GetSession() override; - - private: - DevToolsNetworkController* controller_; - std::unique_ptr network_layer_; - - DISALLOW_COPY_AND_ASSIGN(DevToolsNetworkTransactionFactory); -}; - -} // namespace brightray - -#endif // BRIGHTRAY_BROWSER_NET_DEVTOOLS_NETWORK_TRANSACTION_FACTORY_H_ diff --git a/brightray/browser/net/devtools_network_upload_data_stream.cc b/brightray/browser/net/devtools_network_upload_data_stream.cc deleted file mode 100644 index 73a37541875..00000000000 --- a/brightray/browser/net/devtools_network_upload_data_stream.cc +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "brightray/browser/net/devtools_network_upload_data_stream.h" - -#include "net/base/net_errors.h" - -namespace brightray { - -DevToolsNetworkUploadDataStream::DevToolsNetworkUploadDataStream( - net::UploadDataStream* upload_data_stream) - : net::UploadDataStream(upload_data_stream->is_chunked(), - upload_data_stream->identifier()), - throttle_callback_( - base::Bind(&DevToolsNetworkUploadDataStream::ThrottleCallback, - base::Unretained(this))), - throttled_byte_count_(0), - upload_data_stream_(upload_data_stream) { -} - -DevToolsNetworkUploadDataStream::~DevToolsNetworkUploadDataStream() { - if (interceptor_) - interceptor_->StopThrottle(throttle_callback_); -} - -void DevToolsNetworkUploadDataStream::SetInterceptor( - DevToolsNetworkInterceptor* interceptor) { - DCHECK(!interceptor_); - if (interceptor) - interceptor_ = interceptor->GetWeakPtr(); -} - -bool DevToolsNetworkUploadDataStream::IsInMemory() const { - return false; -} - -int DevToolsNetworkUploadDataStream::InitInternal( - const net::NetLogWithSource& net_log) { - throttled_byte_count_ = 0; - int result = upload_data_stream_->Init( - base::Bind(&DevToolsNetworkUploadDataStream::StreamInitCallback, - base::Unretained(this)), - net_log); - if (result == net::OK && !is_chunked()) - SetSize(upload_data_stream_->size()); - return result; -} - -void DevToolsNetworkUploadDataStream::StreamInitCallback(int result) { - if (!is_chunked()) - SetSize(upload_data_stream_->size()); - OnInitCompleted(result); -} - -int DevToolsNetworkUploadDataStream::ReadInternal( - net::IOBuffer* buf, int buf_len) { - int result = upload_data_stream_->Read(buf, buf_len, - base::Bind(&DevToolsNetworkUploadDataStream::StreamReadCallback, - base::Unretained(this))); - return ThrottleRead(result); -} - -void DevToolsNetworkUploadDataStream::StreamReadCallback(int result) { - result = ThrottleRead(result); - if (result != net::ERR_IO_PENDING) - OnReadCompleted(result); -} - -int DevToolsNetworkUploadDataStream::ThrottleRead(int result) { - if (is_chunked() && upload_data_stream_->IsEOF()) - SetIsFinalChunk(); - - if (!interceptor_ || result < 0) - return result; - - if (result > 0) - throttled_byte_count_ += result; - return interceptor_->StartThrottle(result, throttled_byte_count_, - base::TimeTicks(), false, true, throttle_callback_); -} - -void DevToolsNetworkUploadDataStream::ThrottleCallback( - int result, int64_t bytes) { - throttled_byte_count_ = bytes; - OnReadCompleted(result); -} - -void DevToolsNetworkUploadDataStream::ResetInternal() { - upload_data_stream_->Reset(); - throttled_byte_count_ = 0; - if (interceptor_) - interceptor_->StopThrottle(throttle_callback_); -} - -} // namespace brightray diff --git a/brightray/browser/net/devtools_network_upload_data_stream.h b/brightray/browser/net/devtools_network_upload_data_stream.h deleted file mode 100644 index 1f2921b61da..00000000000 --- a/brightray/browser/net/devtools_network_upload_data_stream.h +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef BRIGHTRAY_BROWSER_NET_DEVTOOLS_NETWORK_UPLOAD_DATA_STREAM_H_ -#define BRIGHTRAY_BROWSER_NET_DEVTOOLS_NETWORK_UPLOAD_DATA_STREAM_H_ - -#include - -#include "base/macros.h" -#include "base/memory/weak_ptr.h" -#include "brightray/browser/net/devtools_network_interceptor.h" -#include "net/base/upload_data_stream.h" - -namespace brightray { - -class DevToolsNetworkUploadDataStream : public net::UploadDataStream { - public: - // Supplied |upload_data_stream| must outlive this object. - explicit DevToolsNetworkUploadDataStream( - net::UploadDataStream* upload_data_stream); - ~DevToolsNetworkUploadDataStream() override; - - void SetInterceptor(DevToolsNetworkInterceptor* interceptor); - - private: - // net::UploadDataStream implementation. - bool IsInMemory() const override; - int InitInternal(const net::NetLogWithSource& net_log) override; - int ReadInternal(net::IOBuffer* buf, int buf_len) override; - void ResetInternal() override; - - void StreamInitCallback(int result); - void StreamReadCallback(int result); - - int ThrottleRead(int result); - void ThrottleCallback(int result, int64_t bytes); - - DevToolsNetworkInterceptor::ThrottleCallback throttle_callback_; - int64_t throttled_byte_count_; - - net::UploadDataStream* upload_data_stream_; - base::WeakPtr interceptor_; - - DISALLOW_COPY_AND_ASSIGN(DevToolsNetworkUploadDataStream); -}; - -} // namespace brightray - -#endif // BRIGHTRAY_BROWSER_NET_DEVTOOLS_NETWORK_UPLOAD_DATA_STREAM_H_ diff --git a/brightray/browser/url_request_context_getter.cc b/brightray/browser/url_request_context_getter.cc index 80c2633f32b..e1a1af6c4b9 100644 --- a/brightray/browser/url_request_context_getter.cc +++ b/brightray/browser/url_request_context_getter.cc @@ -13,8 +13,6 @@ #include "base/task_scheduler/post_task.h" #include "base/threading/sequenced_worker_pool.h" #include "brightray/browser/browser_client.h" -#include "brightray/browser/net/devtools_network_controller_handle.h" -#include "brightray/browser/net/devtools_network_transaction_factory.h" #include "brightray/browser/net/require_ct_delegate.h" #include "brightray/browser/net_log.h" #include "brightray/browser/network_delegate.h" @@ -22,6 +20,7 @@ #include "components/network_session_configurator/common/network_switches.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/cookie_store_factory.h" +#include "content/public/browser/devtools_network_transaction_factory.h" #include "content/public/common/content_switches.h" #include "net/base/host_mapping_rules.h" #include "net/cert/cert_verifier.h" @@ -120,7 +119,6 @@ URLRequestContextGetter::Delegate::GetCookieableSchemes() { URLRequestContextGetter::URLRequestContextGetter( Delegate* delegate, - DevToolsNetworkControllerHandle* handle, NetLog* net_log, const base::FilePath& base_path, bool in_memory, @@ -128,7 +126,6 @@ URLRequestContextGetter::URLRequestContextGetter( content::ProtocolHandlerMap* protocol_handlers, content::URLRequestInterceptorScopedVector protocol_interceptors) : delegate_(delegate), - network_controller_handle_(handle), net_log_(net_log), base_path_(base_path), in_memory_(in_memory), @@ -335,20 +332,10 @@ net::URLRequestContext* URLRequestContextGetter::GetURLRequestContext() { backend.reset(delegate_->CreateHttpCacheBackendFactory(base_path_)); } - if (network_controller_handle_) { - storage_->set_http_transaction_factory(base::WrapUnique( - new net::HttpCache( - base::WrapUnique(new DevToolsNetworkTransactionFactory( - network_controller_handle_->GetController(), - http_network_session_.get())), - std::move(backend), - false))); - } else { - storage_->set_http_transaction_factory(base::WrapUnique( - new net::HttpCache(http_network_session_.get(), - std::move(backend), - false))); - } + storage_->set_http_transaction_factory(base::MakeUnique( + content::CreateDevToolsNetworkTransactionFactory( + http_network_session_.get()), + std::move(backend), false)); std::unique_ptr job_factory = delegate_->CreateURLRequestJobFactory(&protocol_handlers_); diff --git a/brightray/browser/url_request_context_getter.h b/brightray/browser/url_request_context_getter.h index 51b0ed53226..5310e1f48f5 100644 --- a/brightray/browser/url_request_context_getter.h +++ b/brightray/browser/url_request_context_getter.h @@ -35,7 +35,6 @@ class URLRequestJobFactory; namespace brightray { class RequireCTDelegate; -class DevToolsNetworkControllerHandle; class NetLog; class URLRequestContextGetter : public net::URLRequestContextGetter { @@ -64,7 +63,6 @@ class URLRequestContextGetter : public net::URLRequestContextGetter { URLRequestContextGetter( Delegate* delegate, - DevToolsNetworkControllerHandle* handle, NetLog* net_log, const base::FilePath& base_path, bool in_memory, @@ -88,7 +86,6 @@ class URLRequestContextGetter : public net::URLRequestContextGetter { private: Delegate* delegate_; - DevToolsNetworkControllerHandle* network_controller_handle_; NetLog* net_log_; base::FilePath base_path_; bool in_memory_; diff --git a/brightray/filenames.gypi b/brightray/filenames.gypi index 9ddd990cfa5..c6c7d4e8e66 100644 --- a/brightray/filenames.gypi +++ b/brightray/filenames.gypi @@ -47,22 +47,6 @@ 'browser/media/media_device_id_salt.h', 'browser/media/media_stream_devices_controller.cc', 'browser/media/media_stream_devices_controller.h', - 'browser/net/devtools_network_conditions.cc', - 'browser/net/devtools_network_conditions.h', - 'browser/net/devtools_network_controller.cc', - 'browser/net/devtools_network_controller.h', - 'browser/net/devtools_network_controller_handle.cc', - 'browser/net/devtools_network_controller_handle.h', - 'browser/net/devtools_network_interceptor.cc', - 'browser/net/devtools_network_interceptor.h', - 'browser/net/devtools_network_protocol_handler.cc', - 'browser/net/devtools_network_protocol_handler.h', - 'browser/net/devtools_network_transaction_factory.cc', - 'browser/net/devtools_network_transaction_factory.h', - 'browser/net/devtools_network_transaction.cc', - 'browser/net/devtools_network_transaction.h', - 'browser/net/devtools_network_upload_data_stream.cc', - 'browser/net/devtools_network_upload_data_stream.h', 'browser/net/require_ct_delegate.cc', 'browser/net/require_ct_delegate.h', 'browser/net_log.cc', From 6de49f515e1b1a16ca280f0804542cac960abe9f Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Wed, 20 Dec 2017 15:01:19 +0530 Subject: [PATCH 44/98] FIXME: Disbale browser side navigation aka PlzNavigate --- atom/app/atom_main_delegate.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/atom/app/atom_main_delegate.cc b/atom/app/atom_main_delegate.cc index 929b641d446..2fcffef4f94 100644 --- a/atom/app/atom_main_delegate.cc +++ b/atom/app/atom_main_delegate.cc @@ -152,6 +152,9 @@ void AtomMainDelegate::PreSandboxStartup() { } } + // TODO(deepak1556): Fix and re-enable the plznavigation code path. + command_line->AppendSwitch(::switches::kDisableBrowserSideNavigation); + // Allow file:// URIs to read other file:// URIs by default. command_line->AppendSwitch(::switches::kAllowFileAccessFromFiles); From e35b128fa30473c44fca49bb2a345ea6cf057995 Mon Sep 17 00:00:00 2001 From: Aleksei Kuzmin Date: Wed, 20 Dec 2017 16:03:48 +0300 Subject: [PATCH 45/98] Update crashpad to match Chromium 63.0.3239.108 --- vendor/crashpad | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/crashpad b/vendor/crashpad index 561996f78f8..1875fddc7e6 160000 --- a/vendor/crashpad +++ b/vendor/crashpad @@ -1 +1 @@ -Subproject commit 561996f78f8396d4784e9ceed427f605d4b84ad2 +Subproject commit 1875fddc7e671b14d8b54068301d9648d12e9dc2 From fa3d9d32aee14a3e083e75d255461a8ed28ecae3 Mon Sep 17 00:00:00 2001 From: Aleksei Kuzmin Date: Thu, 21 Dec 2017 01:02:49 +0300 Subject: [PATCH 46/98] Use XDG_CURRENT_DESKTOP to determine if the desktop environment is Unity https://chromium-review.googlesource.com/682615 --- brightray/browser/views/views_delegate.cc | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/brightray/browser/views/views_delegate.cc b/brightray/browser/views/views_delegate.cc index 750af7ef271..0546026abd9 100644 --- a/brightray/browser/views/views_delegate.cc +++ b/brightray/browser/views/views_delegate.cc @@ -8,9 +8,22 @@ #include "ui/views/widget/native_widget_aura.h" #if defined(OS_LINUX) +#include "base/environment.h" +#include "base/nix/xdg_util.h" #include "ui/views/linux_ui/linux_ui.h" #endif +namespace { + +bool IsDesktopEnvironmentUnity() { + std::unique_ptr env(base::Environment::Create()); + base::nix::DesktopEnvironment desktop_env = + base::nix::GetDesktopEnvironment(env.get()); + return desktop_env == base::nix::DESKTOP_ENVIRONMENT_UNITY; +} + +} // namespace + namespace brightray { ViewsDelegate::ViewsDelegate() { @@ -104,8 +117,10 @@ bool ViewsDelegate::WindowManagerProvidesTitleBar(bool maximized) { #if defined(OS_LINUX) // On Ubuntu Unity, the system always provides a title bar for maximized // windows. - views::LinuxUI* ui = views::LinuxUI::instance(); - return maximized && ui && ui->UnityIsRunning(); + if (!maximized) + return false; + static bool is_desktop_environment_unity = IsDesktopEnvironmentUnity(); + return is_desktop_environment_unity; #else return false; #endif From 1f2d229862c68c6c5ecdb8103fb7a78c83e52614 Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Sun, 24 Dec 2017 18:12:23 +0530 Subject: [PATCH 47/98] re-use title information from NavigationEntry --- atom/browser/api/atom_api_web_contents.cc | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/atom/browser/api/atom_api_web_contents.cc b/atom/browser/api/atom_api_web_contents.cc index 9f96ac0edf4..68ed0ba7540 100644 --- a/atom/browser/api/atom_api_web_contents.cc +++ b/atom/browser/api/atom_api_web_contents.cc @@ -894,15 +894,17 @@ void WebContents::DidFinishNavigation( } void WebContents::TitleWasSet(content::NavigationEntry* entry) { - auto title = entry ? entry->GetTitle() : base::string16(); - bool explicit_set; base::string16 final_title; - if (entry && entry->GetURL().SchemeIsFile() && title.empty()) { - final_title = base::UTF8ToUTF16(entry->GetURL().ExtractFileName()); - explicit_set = false; - } else { - base::TrimWhitespace(title, base::TRIM_ALL, &final_title); - explicit_set = true; + bool explicit_set = true; + if (entry) { + auto title = entry->GetTitle(); + auto url = entry->GetURL(); + if (url.SchemeIsFile() && title.empty()) { + final_title = base::UTF8ToUTF16(url.ExtractFileName()); + explicit_set = false; + } else { + final_title = title; + } } Emit("page-title-updated", final_title, explicit_set); } From b552ad7065f5525fcf417082bd82bc5995a3fd96 Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Sun, 24 Dec 2017 19:31:39 +0530 Subject: [PATCH 48/98] add taskpriority when creating sequences task runners --- atom/browser/atom_browser_context.cc | 9 +++++---- atom/browser/net/url_request_async_asar_job.cc | 4 ++-- brightray/browser/url_request_context_getter.cc | 10 ++++------ .../chrome/browser/media/native_desktop_media_list.cc | 3 +-- 4 files changed, 12 insertions(+), 14 deletions(-) diff --git a/atom/browser/atom_browser_context.cc b/atom/browser/atom_browser_context.cc index e3fdcd7ddc2..d54a3933096 100644 --- a/atom/browser/atom_browser_context.cc +++ b/atom/browser/atom_browser_context.cc @@ -135,10 +135,11 @@ AtomBrowserContext::CreateURLRequestJobFactory( job_factory->SetProtocolHandler( url::kDataScheme, base::WrapUnique(new net::DataProtocolHandler)); job_factory->SetProtocolHandler( - url::kFileScheme, base::WrapUnique(new asar::AsarProtocolHandler( - base::CreateSequencedTaskRunnerWithTraits( - {base::MayBlock(), - base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})))); + url::kFileScheme, + base::WrapUnique( + new asar::AsarProtocolHandler(base::CreateTaskRunnerWithTraits( + {base::MayBlock(), base::TaskPriority::USER_VISIBLE, + base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})))); job_factory->SetProtocolHandler( url::kHttpScheme, base::WrapUnique(new HttpProtocolHandler(url::kHttpScheme))); diff --git a/atom/browser/net/url_request_async_asar_job.cc b/atom/browser/net/url_request_async_asar_job.cc index b9c6b965717..f7ddcc6141b 100644 --- a/atom/browser/net/url_request_async_asar_job.cc +++ b/atom/browser/net/url_request_async_asar_job.cc @@ -8,7 +8,6 @@ #include "atom/common/atom_constants.h" #include "base/task_scheduler/post_task.h" -#include "base/threading/sequenced_worker_pool.h" namespace atom { @@ -33,7 +32,8 @@ void URLRequestAsyncAsarJob::StartAsync(std::unique_ptr options) { } else { asar::URLRequestAsarJob::Initialize( base::CreateSequencedTaskRunnerWithTraits( - {base::MayBlock(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}), + {base::MayBlock(), base::TaskPriority::USER_VISIBLE, + base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}), base::FilePath(file_path)); asar::URLRequestAsarJob::Start(); } diff --git a/brightray/browser/url_request_context_getter.cc b/brightray/browser/url_request_context_getter.cc index e1a1af6c4b9..e39758d737e 100644 --- a/brightray/browser/url_request_context_getter.cc +++ b/brightray/browser/url_request_context_getter.cc @@ -11,7 +11,6 @@ #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "base/task_scheduler/post_task.h" -#include "base/threading/sequenced_worker_pool.h" #include "brightray/browser/browser_client.h" #include "brightray/browser/net/require_ct_delegate.h" #include "brightray/browser/net_log.h" @@ -73,14 +72,14 @@ URLRequestContextGetter::Delegate::CreateURLRequestJobFactory( } protocol_handlers->clear(); - auto runner = base::CreateSequencedTaskRunnerWithTraits( - {base::MayBlock(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}); - job_factory->SetProtocolHandler( url::kDataScheme, base::WrapUnique(new net::DataProtocolHandler)); job_factory->SetProtocolHandler( url::kFileScheme, - base::WrapUnique(new net::FileProtocolHandler(runner))); + base::WrapUnique( + new net::FileProtocolHandler(base::CreateTaskRunnerWithTraits( + {base::MayBlock(), base::TaskPriority::USER_VISIBLE, + base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})))); return std::move(job_factory); } @@ -227,7 +226,6 @@ net::URLRequestContext* URLRequestContextGetter::GetURLRequestContext() { } // --proxy-server - net::DhcpProxyScriptFetcherFactory dhcp_factory; if (command_line.HasSwitch(switches::kNoProxyServer)) { storage_->set_proxy_service(net::ProxyService::CreateDirect()); } else if (command_line.HasSwitch(switches::kProxyServer)) { diff --git a/chromium_src/chrome/browser/media/native_desktop_media_list.cc b/chromium_src/chrome/browser/media/native_desktop_media_list.cc index 4a201adaf03..ac7b5eeafb3 100644 --- a/chromium_src/chrome/browser/media/native_desktop_media_list.cc +++ b/chromium_src/chrome/browser/media/native_desktop_media_list.cc @@ -15,7 +15,6 @@ using base::PlatformThreadRef; #include "base/strings/string_number_conversions.h" #include "base/strings/utf_string_conversions.h" #include "base/task_scheduler/post_task.h" -#include "base/threading/sequenced_worker_pool.h" #include "chrome/browser/media/desktop_media_list_observer.h" #include "content/public/browser/browser_thread.h" #include "media/base/video_util.h" @@ -237,7 +236,7 @@ NativeDesktopMediaList::NativeDesktopMediaList( observer_(NULL), weak_factory_(this) { capture_task_runner_ = base::CreateSequencedTaskRunnerWithTraits( - {base::MayBlock()}); + {base::MayBlock(), base::TaskPriority::USER_VISIBLE}); } NativeDesktopMediaList::~NativeDesktopMediaList() { From 5684f8886fbe6846a19d55c9056e2970853c1f8d Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Sat, 30 Dec 2017 02:06:11 +0530 Subject: [PATCH 49/98] REVIEW: move ipc use from rvh to rfh --- atom/browser/api/atom_api_web_contents.cc | 34 ++++++----------- atom/browser/api/atom_api_web_contents.h | 3 -- atom/browser/api/event.cc | 8 ++-- atom/common/api/remote_callback_freer.cc | 10 ++--- atom/renderer/api/atom_api_renderer_ipc.cc | 1 - atom/renderer/atom_render_frame_observer.cc | 42 ++++++++++++++++++++- atom/renderer/atom_render_view_observer.cc | 3 +- 7 files changed, 62 insertions(+), 39 deletions(-) diff --git a/atom/browser/api/atom_api_web_contents.cc b/atom/browser/api/atom_api_web_contents.cc index 68ed0ba7540..5b6b16b4353 100644 --- a/atom/browser/api/atom_api_web_contents.cc +++ b/atom/browser/api/atom_api_web_contents.cc @@ -970,15 +970,6 @@ void WebContents::ShowAutofillPopup(content::RenderFrameHost* frame_host, } } -// Should only be used for IPC message maps -bool WebContents::Send(IPC::Message* message) { - auto host = web_contents()->GetRenderViewHost(); - - if (host) - return host->Send(message); - return false; -} - bool WebContents::OnMessageReceived(const IPC::Message& message) { bool handled = true; IPC_BEGIN_MESSAGE_MAP(WebContents, message) @@ -1542,10 +1533,10 @@ void WebContents::TabTraverse(bool reverse) { bool WebContents::SendIPCMessage(bool all_frames, const base::string16& channel, const base::ListValue& args) { - auto host = web_contents()->GetRenderViewHost(); - if (host) { - return host->Send(new AtomViewMsg_Message(host->GetRoutingID(), - all_frames, channel, args)); + auto frame_host = web_contents()->GetMainFrame(); + if (frame_host) { + return frame_host->Send(new AtomFrameMsg_Message( + frame_host->GetRoutingID(), all_frames, channel, args)); } return false; } @@ -1836,18 +1827,15 @@ void WebContents::OnSetTemporaryZoomLevel(content::RenderFrameHost* rfh, IPC::Message* reply_msg) { zoom_controller_->SetTemporaryZoomLevel(level); double new_level = zoom_controller_->GetZoomLevel(); - AtomViewHostMsg_SetTemporaryZoomLevel::WriteReplyParams(reply_msg, new_level); - - auto host = web_contents()->GetRenderViewHost(); - if (host) - host->Send(reply_msg); + AtomFrameHostMsg_SetTemporaryZoomLevel::WriteReplyParams(reply_msg, + new_level); + rfh->Send(reply_msg); } -void WebContents::OnGetZoomLevel(IPC::Message* reply_msg) { - AtomViewHostMsg_GetZoomLevel::WriteReplyParams(reply_msg, GetZoomLevel()); - auto host = web_contents()->GetRenderViewHost(); - if (host) - host->Send(reply_msg); +void WebContents::OnGetZoomLevel(content::RenderFrameHost* rfh, + IPC::Message* reply_msg) { + AtomFrameHostMsg_GetZoomLevel::WriteReplyParams(reply_msg, GetZoomLevel()); + rfh->Send(reply_msg); } v8::Local WebContents::GetWebPreferences(v8::Isolate* isolate) { diff --git a/atom/browser/api/atom_api_web_contents.h b/atom/browser/api/atom_api_web_contents.h index 96bbd426504..00e4b5a84a1 100644 --- a/atom/browser/api/atom_api_web_contents.h +++ b/atom/browser/api/atom_api_web_contents.h @@ -149,9 +149,6 @@ class WebContents : public mate::TrackableObject, void AddWorkSpace(mate::Arguments* args, const base::FilePath& path); void RemoveWorkSpace(mate::Arguments* args, const base::FilePath& path); - // IPC - bool Send(IPC::Message* message); - // Editing commands. void Undo(); void Redo(); diff --git a/atom/browser/api/event.cc b/atom/browser/api/event.cc index 673576c6d61..1ee0d57e360 100644 --- a/atom/browser/api/event.cc +++ b/atom/browser/api/event.cc @@ -6,7 +6,7 @@ #include "atom/common/api/api_messages.h" #include "atom/common/native_mate_converters/string16_converter.h" -#include "content/public/browser/render_view_host.h" +#include "content/public/browser/render_frame_host.h" #include "content/public/browser/web_contents.h" #include "native_mate/object_template_builder.h" @@ -60,10 +60,8 @@ bool Event::SendReply(const base::string16& json) { if (message_ == nullptr || sender_ == nullptr) return false; - AtomViewHostMsg_Message_Sync::WriteReplyParams(message_, json); - auto host = sender_->GetRenderViewHost(); - if (!host) return false; - bool success = host->Send(message_); + AtomFrameHostMsg_Message_Sync::WriteReplyParams(message_, json); + bool success = sender_->Send(message_); message_ = nullptr; sender_ = nullptr; return success; diff --git a/atom/common/api/remote_callback_freer.cc b/atom/common/api/remote_callback_freer.cc index d91891e55f5..c15d5389a2e 100644 --- a/atom/common/api/remote_callback_freer.cc +++ b/atom/common/api/remote_callback_freer.cc @@ -7,7 +7,7 @@ #include "atom/common/api/api_messages.h" #include "base/strings/utf_string_conversions.h" #include "base/values.h" -#include "content/public/browser/render_view_host.h" +#include "content/public/browser/render_frame_host.h" #include "content/public/browser/web_contents.h" namespace atom { @@ -37,10 +37,10 @@ void RemoteCallbackFreer::RunDestructor() { base::ASCIIToUTF16("ELECTRON_RENDERER_RELEASE_CALLBACK"); base::ListValue args; args.AppendInteger(object_id_); - auto host = web_contents()->GetRenderViewHost(); - if (host) { - host->Send(new AtomViewMsg_Message( - host->GetRoutingID(), false, channel, args)); + auto frame_host = web_contents()->GetMainFrame(); + if (frame_host) { + frame_host->Send(new AtomFrameMsg_Message(frame_host->GetRoutingID(), false, + channel, args)); } Observe(nullptr); diff --git a/atom/renderer/api/atom_api_renderer_ipc.cc b/atom/renderer/api/atom_api_renderer_ipc.cc index 483f5639bfb..dcb59bdb070 100644 --- a/atom/renderer/api/atom_api_renderer_ipc.cc +++ b/atom/renderer/api/atom_api_renderer_ipc.cc @@ -10,7 +10,6 @@ #include "content/public/renderer/render_frame.h" #include "native_mate/dictionary.h" #include "third_party/WebKit/public/web/WebLocalFrame.h" -#include "third_party/WebKit/public/web/WebView.h" using content::RenderFrame; using blink::WebLocalFrame; diff --git a/atom/renderer/atom_render_frame_observer.cc b/atom/renderer/atom_render_frame_observer.cc index 4ddf9186b72..07b634331af 100644 --- a/atom/renderer/atom_render_frame_observer.cc +++ b/atom/renderer/atom_render_frame_observer.cc @@ -7,8 +7,8 @@ #include #include +// Put this before event_emitter_caller.h to have string16 support. #include "atom/common/native_mate_converters/string16_converter.h" - #include "atom/common/api/api_messages.h" #include "atom/common/api/event_emitter_caller.h" #include "atom/common/native_mate_converters/value_converter.h" @@ -127,6 +127,46 @@ void AtomRenderFrameObserver::OnDestruct() { delete this; } +bool AtomRenderFrameObserver::OnMessageReceived(const IPC::Message& message) { + bool handled = true; + IPC_BEGIN_MESSAGE_MAP(AtomRenderFrameObserver, message) + IPC_MESSAGE_HANDLER(AtomFrameMsg_Message, OnBrowserMessage) + IPC_MESSAGE_UNHANDLED(handled = false) + IPC_END_MESSAGE_MAP() + + return handled; +} + +void AtomRenderFrameObserver::OnBrowserMessage(bool send_to_all, + const base::string16& channel, + const base::ListValue& args) { + blink::WebLocalFrame* frame = render_frame_->GetWebFrame(); + if (!frame || !render_frame_->IsMainFrame()) + return; + + // Don't handle browser messages before document element is created. + // When we receive a message from the browser, we try to transfer it + // to a web page, and when we do that Blink creates an empty + // document element if it hasn't been created yet, and it makes our init + // script to run while `window.location` is still "about:blank". + blink::WebDocument document = frame->GetDocument(); + blink::WebElement html_element = document.DocumentElement(); + if (html_element.IsNull()) { + return; + } + + EmitIPCEvent(frame, channel, args); + + // Also send the message to all sub-frames. + if (send_to_all) { + for (blink::WebFrame* child = frame->FirstChild(); child; + child = child->NextSibling()) + if (child->IsWebLocalFrame()) { + EmitIPCEvent(child->ToWebLocalFrame(), channel, args); + } + } +} + void AtomRenderFrameObserver::CreateIsolatedWorldContext() { auto frame = render_frame_->GetWebFrame(); diff --git a/atom/renderer/atom_render_view_observer.cc b/atom/renderer/atom_render_view_observer.cc index 1a425dfa1d4..30bd8d004ab 100644 --- a/atom/renderer/atom_render_view_observer.cc +++ b/atom/renderer/atom_render_view_observer.cc @@ -14,7 +14,8 @@ namespace atom { AtomRenderViewObserver::AtomRenderViewObserver(content::RenderView* render_view) : content::RenderViewObserver(render_view) {} -AtomRenderViewObserver::~AtomRenderViewObserver() {} +AtomRenderViewObserver::~AtomRenderViewObserver() { +} bool AtomRenderViewObserver::OnMessageReceived(const IPC::Message& message) { bool handled = true; From 719980a948f3284b190318eaa2a4b7e3f32237b5 Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Sat, 30 Dec 2017 21:55:09 +0530 Subject: [PATCH 50/98] REVIEW: remove device emulation ipc dependecny on rvh --- atom/browser/api/atom_api_web_contents.cc | 28 +++++++++++++-------- atom/common/api/event_emitter_caller.h | 1 + atom/renderer/atom_render_frame_observer.cc | 2 -- spec/api-web-contents-spec.js | 4 +-- 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/atom/browser/api/atom_api_web_contents.cc b/atom/browser/api/atom_api_web_contents.cc index 5b6b16b4353..c48f66ddc2a 100644 --- a/atom/browser/api/atom_api_web_contents.cc +++ b/atom/browser/api/atom_api_web_contents.cc @@ -65,8 +65,6 @@ #include "content/public/browser/navigation_handle.h" #include "content/public/browser/plugin_service.h" #include "content/public/browser/render_frame_host.h" -#include "content/public/browser/render_process_host.h" -#include "content/public/browser/render_view_host.h" #include "content/public/browser/render_widget_host.h" #include "content/public/browser/render_widget_host_view.h" #include "content/public/browser/resource_request_details.h" @@ -1278,20 +1276,30 @@ void WebContents::EnableDeviceEmulation( if (type_ == REMOTE) return; - auto host = web_contents()->GetRenderViewHost(); - - if (host) - host->Send(new ViewMsg_EnableDeviceEmulation(host->GetRoutingID(), params)); + auto frame_host = web_contents()->GetMainFrame(); + if (frame_host) { + auto widget_host = + frame_host ? frame_host->GetView()->GetRenderWidgetHost() : nullptr; + if (!widget_host) + return; + widget_host->Send( + new ViewMsg_EnableDeviceEmulation(widget_host->GetRoutingID(), params)); + } } void WebContents::DisableDeviceEmulation() { if (type_ == REMOTE) return; - auto host = web_contents()->GetRenderViewHost(); - - if (host) - host->Send(new ViewMsg_DisableDeviceEmulation(host->GetRoutingID())); + auto frame_host = web_contents()->GetMainFrame(); + if (frame_host) { + auto widget_host = + frame_host ? frame_host->GetView()->GetRenderWidgetHost() : nullptr; + if (!widget_host) + return; + widget_host->Send( + new ViewMsg_DisableDeviceEmulation(widget_host->GetRoutingID())); + } } void WebContents::ToggleDevTools() { diff --git a/atom/common/api/event_emitter_caller.h b/atom/common/api/event_emitter_caller.h index 24917cbef62..64322e562ef 100644 --- a/atom/common/api/event_emitter_caller.h +++ b/atom/common/api/event_emitter_caller.h @@ -7,6 +7,7 @@ #include +#include "atom/common/native_mate_converters/string16_converter.h" #include "native_mate/converter.h" namespace mate { diff --git a/atom/renderer/atom_render_frame_observer.cc b/atom/renderer/atom_render_frame_observer.cc index 07b634331af..8fb04f7363d 100644 --- a/atom/renderer/atom_render_frame_observer.cc +++ b/atom/renderer/atom_render_frame_observer.cc @@ -7,8 +7,6 @@ #include #include -// Put this before event_emitter_caller.h to have string16 support. -#include "atom/common/native_mate_converters/string16_converter.h" #include "atom/common/api/api_messages.h" #include "atom/common/api/event_emitter_caller.h" #include "atom/common/native_mate_converters/value_converter.h" diff --git a/spec/api-web-contents-spec.js b/spec/api-web-contents-spec.js index 47d1786bc28..cf902522899 100644 --- a/spec/api-web-contents-spec.js +++ b/spec/api-web-contents-spec.js @@ -92,9 +92,7 @@ describe('webContents module', () => { }) }) - // TODO(alexeykuzmin): Disabled during Ch63 upgrade. - // Fix it and enable back. - xdescribe('setDevToolsWebCotnents() API', () => { + describe('setDevToolsWebCotnents() API', () => { it('sets arbitry webContents as devtools', (done) => { let devtools = new BrowserWindow({show: false}) devtools.webContents.once('dom-ready', () => { From b9bb4dfc06a0f2f4f5d8f4a0b35f69df240cc638 Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Tue, 2 Jan 2018 12:10:25 +0530 Subject: [PATCH 51/98] FIXME: re-enable guest webcontents based on OOPIF feature --- brightray/browser/browser_main_parts.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/brightray/browser/browser_main_parts.cc b/brightray/browser/browser_main_parts.cc index 9313a9fa92b..5c6e7943216 100644 --- a/brightray/browser/browser_main_parts.cc +++ b/brightray/browser/browser_main_parts.cc @@ -186,7 +186,8 @@ void OverrideAppLogsPath() { void BrowserMainParts::PreEarlyInitialization() { std::unique_ptr feature_list(new base::FeatureList); - feature_list->InitializeFromCommandLine("", ""); + // TODO(deepak1556): Disable guest webcontents based on OOPIF feature. + feature_list->InitializeFromCommandLine("", "GuestViewCrossProcessFrames"); base::FeatureList::SetInstance(std::move(feature_list)); OverrideAppLogsPath(); #if defined(USE_X11) From 80772c241907f70c91d500cc6d69c1617ee3aaf2 Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Tue, 2 Jan 2018 12:13:38 +0530 Subject: [PATCH 52/98] FIXME: Disable node crypto spec --- spec/node-spec.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spec/node-spec.js b/spec/node-spec.js index f053aa4dbad..56aa5f5d959 100644 --- a/spec/node-spec.js +++ b/spec/node-spec.js @@ -321,7 +321,9 @@ describe('node feature', () => { assert.equal(buffer.length, 4096) }) - it('does not crash for crypto operations', () => { + // TODO(deepak1556): Disabled during Ch63 upgrade. + // Fix it and enable back. + xit('does not crash for crypto operations', () => { const crypto = require('crypto') const data = 'lG9E+/g4JmRmedDAnihtBD4Dfaha/GFOjd+xUOQI05UtfVX3DjUXvrS98p7kZQwY3LNhdiFo7MY5rGft8yBuDhKuNNag9vRx/44IuClDhdQ=' const key = 'q90K9yBqhWZnAMCMTOJfPQ==' From f68cba0c7160d81a21367f132183c5db20e35d42 Mon Sep 17 00:00:00 2001 From: Aleksei Kuzmin Date: Fri, 5 Jan 2018 14:26:33 +0300 Subject: [PATCH 53/98] Update Chrome version --- atom/common/chrome_version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atom/common/chrome_version.h b/atom/common/chrome_version.h index e4e34bd1a50..23bdd6adb77 100644 --- a/atom/common/chrome_version.h +++ b/atom/common/chrome_version.h @@ -8,7 +8,7 @@ #ifndef ATOM_COMMON_CHROME_VERSION_H_ #define ATOM_COMMON_CHROME_VERSION_H_ -#define CHROME_VERSION_STRING "63.0.3239.108" +#define CHROME_VERSION_STRING "63.0.3239.132" #define CHROME_VERSION "v" CHROME_VERSION_STRING #endif // ATOM_COMMON_CHROME_VERSION_H_ From c15e09b71e1c64ebf417ff376cbbbf2917291c8f Mon Sep 17 00:00:00 2001 From: Tomas Rycl Date: Wed, 10 Jan 2018 13:47:14 +0100 Subject: [PATCH 54/98] rtc_base_approved renamed to generic --- brightray/brightray.gyp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/brightray/brightray.gyp b/brightray/brightray.gyp index 1a224f7eb53..dc5760db708 100644 --- a/brightray/brightray.gyp +++ b/brightray/brightray.gyp @@ -328,7 +328,7 @@ '<(libchromiumcontent_dir)/desktop_capture.lib', '<(libchromiumcontent_dir)/dom_keycode_converter.lib', '<(libchromiumcontent_dir)/rtc_base.lib', - '<(libchromiumcontent_dir)/rtc_base_approved.lib', + '<(libchromiumcontent_dir)/rtc_base_generic.lib', '<(libchromiumcontent_dir)/system_wrappers.lib', '<(libchromiumcontent_dir)/webrtc_common.lib', '<(libchromiumcontent_dir)/init_webrtc.lib', From f2116c50c079531cc287c2b1ca4b0695fab97e58 Mon Sep 17 00:00:00 2001 From: Tomas Rycl Date: Wed, 10 Jan 2018 08:49:21 +0100 Subject: [PATCH 55/98] Unity detection now works in all OSes - returns false. --- brightray/browser/views/views_delegate.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/brightray/browser/views/views_delegate.cc b/brightray/browser/views/views_delegate.cc index 0546026abd9..2cca70d1cef 100644 --- a/brightray/browser/views/views_delegate.cc +++ b/brightray/browser/views/views_delegate.cc @@ -16,10 +16,14 @@ namespace { bool IsDesktopEnvironmentUnity() { +#if defined(OS_LINUX) std::unique_ptr env(base::Environment::Create()); base::nix::DesktopEnvironment desktop_env = base::nix::GetDesktopEnvironment(env.get()); return desktop_env == base::nix::DESKTOP_ENVIRONMENT_UNITY; +#else + return false; +#endif } } // namespace From ecd0f9d0e712fe1b93779bfd9b0e2a706d2616be Mon Sep 17 00:00:00 2001 From: Nitish Sakhawalkar Date: Mon, 12 Mar 2018 14:22:34 +0900 Subject: [PATCH 56/98] Fix build by adding define in node_includes.h --- atom/common/node_includes.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/atom/common/node_includes.h b/atom/common/node_includes.h index 76ce95a8764..b6317ca024a 100644 --- a/atom/common/node_includes.h +++ b/atom/common/node_includes.h @@ -6,11 +6,26 @@ #define ATOM_COMMON_NODE_INCLUDES_H_ #include "base/logging.h" +#include "v8-platform.h" // Include common headers for using node APIs. #define BUILDING_NODE_EXTENSION +// The following define makes sure that we do not include the macros +// again. But we still need the tracing functions, so declaring them. +#define SRC_TRACING_TRACE_EVENT_H_ +namespace node { +namespace tracing { +class TraceEventHelper { + public: + static v8::TracingController* GetTracingController(); + static void SetTracingController(v8::TracingController* controller); +}; + +} +} + #undef ASSERT #undef CHECK #undef CHECK_EQ From 5f71fbc6b3ac29366469bc2f673b21a19fc49bd9 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Mon, 12 Mar 2018 14:50:49 +0900 Subject: [PATCH 57/98] Fix warnings when building node --- common.gypi | 3 +++ 1 file changed, 3 insertions(+) diff --git a/common.gypi b/common.gypi index 056bd361659..5b582e35d79 100644 --- a/common.gypi +++ b/common.gypi @@ -110,6 +110,7 @@ '-Wno-gnu-folding-constant', '-Wno-shift-negative-value', '-Wno-varargs', # https://git.io/v6Olj + '-Wno-unused-private-field', ], }, 'conditions': [ @@ -134,6 +135,8 @@ '-Wno-string-plus-int', '-Wno-shift-negative-value', '-Wno-reserved-user-defined-literal', + '-Wno-implicit-function-declaration', + '-Wno-long-long', ], }], ], From aa2538165166c96b969fe35a877c8637406ead25 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Mon, 12 Mar 2018 15:12:33 +0900 Subject: [PATCH 58/98] Fix warning when building openssl-cli --- common.gypi | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/common.gypi b/common.gypi index 5b582e35d79..281529eb9b3 100644 --- a/common.gypi +++ b/common.gypi @@ -203,6 +203,11 @@ '-fvisibility=hidden', ], }], + ['_target_name=="openssl-cli"', { + 'ldflags!': [ + '-nostdlib++', + ] + }], ['_target_name=="libuv"', { 'conditions': [ ['OS=="win"', { From 0f9f04e4ec79023366e7c19679b9937286a954a6 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Mon, 12 Mar 2018 15:28:07 +0900 Subject: [PATCH 59/98] Fix cpplint warning --- script/cpplint.py | 1 + 1 file changed, 1 insertion(+) diff --git a/script/cpplint.py b/script/cpplint.py index 49ddb877f11..78419745c24 100755 --- a/script/cpplint.py +++ b/script/cpplint.py @@ -19,6 +19,7 @@ IGNORE_FILES = set(os.path.join(*components) for components in [ ['atom', 'common', 'api', 'api_messages.h'], ['atom', 'common', 'common_message_generator.cc'], ['atom', 'common', 'common_message_generator.h'], + ['atom', 'common', 'node_includes.h'], ['atom', 'node', 'osfhandle.cc'], ['brightray', 'browser', 'mac', 'bry_inspectable_web_contents_view.h'], ['brightray', 'browser', 'mac', 'event_dispatching_window.h'], From 76ef6e3ecca2e394d50c7cc8505ae0e8151ebd57 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Mon, 12 Mar 2018 15:28:55 +0900 Subject: [PATCH 60/98] CertificateList => ScopedCERTCertificateList --- atom/browser/api/atom_api_app.cc | 2 +- .../browser/certificate_manager_model.cc | 19 ++++++++++--------- .../browser/certificate_manager_model.h | 10 +++++----- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/atom/browser/api/atom_api_app.cc b/atom/browser/api/atom_api_app.cc index 87cc591736f..c38f9e23723 100644 --- a/atom/browser/api/atom_api_app.cc +++ b/atom/browser/api/atom_api_app.cc @@ -484,7 +484,7 @@ int ImportIntoCertStore( const base::DictionaryValue& options) { std::string file_data, cert_path; base::string16 password; - net::CertificateList imported_certs; + net::ScopedCERTCertificateList imported_certs; int rv = -1; options.GetString("certificate", &cert_path); options.GetString("password", &password); diff --git a/chromium_src/chrome/browser/certificate_manager_model.cc b/chromium_src/chrome/browser/certificate_manager_model.cc index 0713fc2eb80..aefc5178340 100644 --- a/chromium_src/chrome/browser/certificate_manager_model.cc +++ b/chromium_src/chrome/browser/certificate_manager_model.cc @@ -91,11 +91,12 @@ CertificateManagerModel::CertificateManagerModel( CertificateManagerModel::~CertificateManagerModel() { } -int CertificateManagerModel::ImportFromPKCS12(PK11SlotInfo* slot_info, - const std::string& data, - const base::string16& password, - bool is_extractable, - net::CertificateList* imported_certs) { +int CertificateManagerModel::ImportFromPKCS12( + PK11SlotInfo* slot_info, + const std::string& data, + const base::string16& password, + bool is_extractable, + net::ScopedCERTCertificateList* imported_certs) { return cert_db_->ImportFromPKCS12(slot_info, data, password, is_extractable, imported_certs); } @@ -105,14 +106,14 @@ int CertificateManagerModel::ImportUserCert(const std::string& data) { } bool CertificateManagerModel::ImportCACerts( - const net::CertificateList& certificates, + const net::ScopedCERTCertificateList& certificates, net::NSSCertDatabase::TrustBits trust_bits, net::NSSCertDatabase::ImportCertFailureList* not_imported) { return cert_db_->ImportCACerts(certificates, trust_bits, not_imported); } bool CertificateManagerModel::ImportServerCert( - const net::CertificateList& certificates, + const net::ScopedCERTCertificateList& certificates, net::NSSCertDatabase::TrustBits trust_bits, net::NSSCertDatabase::ImportCertFailureList* not_imported) { return cert_db_->ImportServerCert(certificates, trust_bits, @@ -120,13 +121,13 @@ bool CertificateManagerModel::ImportServerCert( } bool CertificateManagerModel::SetCertTrust( - const net::X509Certificate* cert, + CERTCertificate* cert, net::CertType type, net::NSSCertDatabase::TrustBits trust_bits) { return cert_db_->SetCertTrust(cert, type, trust_bits); } -bool CertificateManagerModel::Delete(net::X509Certificate* cert) { +bool CertificateManagerModel::Delete(CERTCertificate* cert) { return cert_db_->DeleteCertAndKey(cert); } diff --git a/chromium_src/chrome/browser/certificate_manager_model.h b/chromium_src/chrome/browser/certificate_manager_model.h index eb84b69f733..d1a50b1b79a 100644 --- a/chromium_src/chrome/browser/certificate_manager_model.h +++ b/chromium_src/chrome/browser/certificate_manager_model.h @@ -48,7 +48,7 @@ class CertificateManagerModel { const std::string& data, const base::string16& password, bool is_extractable, - net::CertificateList* imported_certs); + net::ScopedCERTCertificateList* imported_certs); // Import user certificate from DER encoded |data|. // Returns a net error code on failure. @@ -62,7 +62,7 @@ class CertificateManagerModel { // Returns false if there is an internal error, otherwise true is returned and // |not_imported| should be checked for any certificates that were not // imported. - bool ImportCACerts(const net::CertificateList& certificates, + bool ImportCACerts(const net::ScopedCERTCertificateList& certificates, net::NSSCertDatabase::TrustBits trust_bits, net::NSSCertDatabase::ImportCertFailureList* not_imported); @@ -77,20 +77,20 @@ class CertificateManagerModel { // |not_imported| should be checked for any certificates that were not // imported. bool ImportServerCert( - const net::CertificateList& certificates, + const net::ScopedCERTCertificateList& certificates, net::NSSCertDatabase::TrustBits trust_bits, net::NSSCertDatabase::ImportCertFailureList* not_imported); // Set trust values for certificate. // |trust_bits| should be a bit field of TRUST* values from NSSCertDatabase. // Returns true on success or false on failure. - bool SetCertTrust(const net::X509Certificate* cert, + bool SetCertTrust(CERTCertificate* cert, net::CertType type, net::NSSCertDatabase::TrustBits trust_bits); // Delete the cert. Returns true on success. |cert| is still valid when this // function returns. - bool Delete(net::X509Certificate* cert); + bool Delete(CERTCertificate* cert); private: CertificateManagerModel(net::NSSCertDatabase* nss_cert_database, From 34cb9cf1fe48de2badd039c54de9a0ec9472c8e1 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Mon, 12 Mar 2018 15:47:17 +0900 Subject: [PATCH 61/98] Use lld for linking on both Debug/Release builds This follows Chromium's config, otherwise we get linking error: /usr/bin/ld: shared_library/libmirclient.so.9: __cxa_finalize: invalid needed version 2 shared_library/libmirclient.so.9: error adding symbols: Bad value --- brightray/brightray.gyp | 1 - brightray/brightray.gypi | 6 +++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/brightray/brightray.gyp b/brightray/brightray.gyp index dc5760db708..b0f9652debc 100644 --- a/brightray/brightray.gyp +++ b/brightray/brightray.gyp @@ -129,7 +129,6 @@ '<(libchromiumcontent_dir)/libpdf.a', '<(libchromiumcontent_dir)/libppapi_cpp_objects.a', '<(libchromiumcontent_dir)/libppapi_internal_module.a', - '<(libchromiumcontent_dir)/libjpeg.a', '<(libchromiumcontent_dir)/libpdfium.a', '<(libchromiumcontent_dir)/libfdrm.a', '<(libchromiumcontent_dir)/libformfiller.a', diff --git a/brightray/brightray.gypi b/brightray/brightray.gypi index 2f5109d00e6..596b9bd373e 100644 --- a/brightray/brightray.gypi +++ b/brightray/brightray.gypi @@ -142,6 +142,11 @@ '-Wl,-z,noexecstack', ], }], # OS=="linux" + ['OS=="linux" and target_arch in ["ia32", "x64", "arm64"]', { + 'ldflags': [ + '-fuse-ld=lld', # Chromium Clang uses lld for linking + ], + }], # OS=="linux" and target_arch in ["ia32", "x64", "arm64"] ['OS=="mac"', { 'defines': [ # The usage of "webrtc/modules/desktop_capture/desktop_capture_options.h" @@ -293,7 +298,6 @@ ], 'ldflags': [ '-flto=thin', - '-fuse-ld=lld', # Chromium Clang uses lld for doing LTO '-Wl,--icf=all', '-Wl,--lto-O0', # this could be removed in future; see https://codereview.chromium.org/2939923004 '-Wl,-mllvm,-function-sections', From ecefe41728e7336d69821af37a5167b7124ead48 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Mon, 12 Mar 2018 15:59:41 +0900 Subject: [PATCH 62/98] Linker behaves differently on arm --- brightray/brightray.gyp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/brightray/brightray.gyp b/brightray/brightray.gyp index b0f9652debc..532b831e98e 100644 --- a/brightray/brightray.gyp +++ b/brightray/brightray.gyp @@ -166,6 +166,9 @@ }], ['target_arch=="arm"', { 'link_settings': { + 'libraries': [ + '<(libchromiumcontent_dir)/libjpeg.a', + ], 'libraries!': [ '<(libchromiumcontent_dir)/libdesktop_capture_differ_sse2.a', ], From 7e7634d344d9314255141b36e9a97f3e8e5adcdb Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Mon, 12 Mar 2018 16:08:43 +0900 Subject: [PATCH 63/98] Chromium 63 - upgrade to Node v9.7.0 (#12219) * OPENSSL_PRODUCT => openssl_product * node => node_lib and V8_BASE => v8_base * build node target for <(node_lib_target_name) * update node ref * update node::Environment::TickInfo calls * update node ref * Use InternalCallbackScope for ticking event loop * enter context scope before InternalCallbackScope * don't lint v8 platform header --- atom/common/node_includes.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atom/common/node_includes.h b/atom/common/node_includes.h index b6317ca024a..6243f0b3fcb 100644 --- a/atom/common/node_includes.h +++ b/atom/common/node_includes.h @@ -6,7 +6,7 @@ #define ATOM_COMMON_NODE_INCLUDES_H_ #include "base/logging.h" -#include "v8-platform.h" +#include "v8-platform.h" // NOLINT // Include common headers for using node APIs. From b08d086b0f56eb57fb6fd30200596ee87a06ff95 Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Mon, 12 Mar 2018 16:32:10 +0900 Subject: [PATCH 64/98] fix stale rebase --- .../browser/atom_javascript_dialog_manager.cc | 4 -- atom/renderer/atom_render_frame_observer.cc | 40 ------------------- 2 files changed, 44 deletions(-) diff --git a/atom/browser/atom_javascript_dialog_manager.cc b/atom/browser/atom_javascript_dialog_manager.cc index 7532da27953..d84c6af5917 100644 --- a/atom/browser/atom_javascript_dialog_manager.cc +++ b/atom/browser/atom_javascript_dialog_manager.cc @@ -95,13 +95,9 @@ void AtomJavaScriptDialogManager::OnMessageBoxCallback( const std::string& origin, int code, bool checkbox_checked) { -<<<<<<< HEAD if (checkbox_checked) origin_counts_[origin] = kUserWantsNoMoreDialogs; callback.Run(code == 0, base::string16()); -======= - std::move(callback).Run(code == 0, base::string16()); ->>>>>>> Calling non-const callbacks requires some tricks } } // namespace atom diff --git a/atom/renderer/atom_render_frame_observer.cc b/atom/renderer/atom_render_frame_observer.cc index 8fb04f7363d..00c85bb3f1a 100644 --- a/atom/renderer/atom_render_frame_observer.cc +++ b/atom/renderer/atom_render_frame_observer.cc @@ -125,46 +125,6 @@ void AtomRenderFrameObserver::OnDestruct() { delete this; } -bool AtomRenderFrameObserver::OnMessageReceived(const IPC::Message& message) { - bool handled = true; - IPC_BEGIN_MESSAGE_MAP(AtomRenderFrameObserver, message) - IPC_MESSAGE_HANDLER(AtomFrameMsg_Message, OnBrowserMessage) - IPC_MESSAGE_UNHANDLED(handled = false) - IPC_END_MESSAGE_MAP() - - return handled; -} - -void AtomRenderFrameObserver::OnBrowserMessage(bool send_to_all, - const base::string16& channel, - const base::ListValue& args) { - blink::WebLocalFrame* frame = render_frame_->GetWebFrame(); - if (!frame || !render_frame_->IsMainFrame()) - return; - - // Don't handle browser messages before document element is created. - // When we receive a message from the browser, we try to transfer it - // to a web page, and when we do that Blink creates an empty - // document element if it hasn't been created yet, and it makes our init - // script to run while `window.location` is still "about:blank". - blink::WebDocument document = frame->GetDocument(); - blink::WebElement html_element = document.DocumentElement(); - if (html_element.IsNull()) { - return; - } - - EmitIPCEvent(frame, channel, args); - - // Also send the message to all sub-frames. - if (send_to_all) { - for (blink::WebFrame* child = frame->FirstChild(); child; - child = child->NextSibling()) - if (child->IsWebLocalFrame()) { - EmitIPCEvent(child->ToWebLocalFrame(), channel, args); - } - } -} - void AtomRenderFrameObserver::CreateIsolatedWorldContext() { auto frame = render_frame_->GetWebFrame(); From d141d2445da4a36c5bdec7bb32cf9fd6cbc2e20c Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Mon, 12 Mar 2018 17:27:43 +0900 Subject: [PATCH 65/98] Fix build error caused by base::Passed changes --- atom/browser/atom_javascript_dialog_manager.cc | 12 +++++++----- atom/browser/atom_javascript_dialog_manager.h | 2 +- atom/browser/web_contents_preferences.cc | 1 + 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/atom/browser/atom_javascript_dialog_manager.cc b/atom/browser/atom_javascript_dialog_manager.cc index d84c6af5917..8e80e58a94c 100644 --- a/atom/browser/atom_javascript_dialog_manager.cc +++ b/atom/browser/atom_javascript_dialog_manager.cc @@ -37,9 +37,9 @@ void AtomJavaScriptDialogManager::RunJavaScriptDialog( const base::string16& default_prompt_text, DialogClosedCallback callback, bool* did_suppress_message) { - const std::string origin = origin_url.GetOrigin().spec(); + const std::string& origin = origin_url.GetOrigin().spec(); if (origin_counts_[origin] == kUserWantsNoMoreDialogs) { - return callback.Run(false, base::string16()); + return std::move(callback).Run(false, base::string16()); } if (dialog_type != JavaScriptDialogType::JAVASCRIPT_DIALOG_TYPE_ALERT && @@ -73,7 +73,9 @@ void AtomJavaScriptDialogManager::RunJavaScriptDialog( base::UTF16ToUTF8(message_text), "", checkbox_string, false, gfx::ImageSkia(), base::Bind(&AtomJavaScriptDialogManager::OnMessageBoxCallback, - base::Unretained(this), callback, origin)); + base::Unretained(this), + base::Passed(std::move(callback)), + origin)); } void AtomJavaScriptDialogManager::RunBeforeUnloadDialog( @@ -91,13 +93,13 @@ void AtomJavaScriptDialogManager::CancelDialogs( } void AtomJavaScriptDialogManager::OnMessageBoxCallback( - const DialogClosedCallback& callback, + DialogClosedCallback callback, const std::string& origin, int code, bool checkbox_checked) { if (checkbox_checked) origin_counts_[origin] = kUserWantsNoMoreDialogs; - callback.Run(code == 0, base::string16()); + std::move(callback).Run(code == 0, base::string16()); } } // namespace atom diff --git a/atom/browser/atom_javascript_dialog_manager.h b/atom/browser/atom_javascript_dialog_manager.h index dffedd91e67..bbfd94479db 100644 --- a/atom/browser/atom_javascript_dialog_manager.h +++ b/atom/browser/atom_javascript_dialog_manager.h @@ -37,7 +37,7 @@ class AtomJavaScriptDialogManager : public content::JavaScriptDialogManager { bool reset_state) override; private: - void OnMessageBoxCallback(const DialogClosedCallback& callback, + void OnMessageBoxCallback(DialogClosedCallback callback, const std::string& origin, int code, bool checkbox_checked); diff --git a/atom/browser/web_contents_preferences.cc b/atom/browser/web_contents_preferences.cc index bc8b0f27bda..6b912469f89 100644 --- a/atom/browser/web_contents_preferences.cc +++ b/atom/browser/web_contents_preferences.cc @@ -16,6 +16,7 @@ #include "base/memory/ptr_util.h" #include "base/strings/string_number_conversions.h" #include "cc/base/switches.h" +#include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_process_host.h" #include "content/public/common/content_switches.h" #include "content/public/common/web_preferences.h" From f4ee48eaf47d49b3ab314d127f69f42da3a92b6c Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Mon, 12 Mar 2018 16:46:23 +0900 Subject: [PATCH 66/98] v8-platform header is not required explicitly --- atom/common/node_includes.h | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/atom/common/node_includes.h b/atom/common/node_includes.h index 6243f0b3fcb..8fbd0d1beae 100644 --- a/atom/common/node_includes.h +++ b/atom/common/node_includes.h @@ -6,7 +6,6 @@ #define ATOM_COMMON_NODE_INCLUDES_H_ #include "base/logging.h" -#include "v8-platform.h" // NOLINT // Include common headers for using node APIs. @@ -15,16 +14,6 @@ // The following define makes sure that we do not include the macros // again. But we still need the tracing functions, so declaring them. #define SRC_TRACING_TRACE_EVENT_H_ -namespace node { -namespace tracing { -class TraceEventHelper { - public: - static v8::TracingController* GetTracingController(); - static void SetTracingController(v8::TracingController* controller); -}; - -} -} #undef ASSERT #undef CHECK @@ -48,4 +37,16 @@ class TraceEventHelper { #include "vendor/node/src/node_internals.h" #include "vendor/node/src/node_platform.h" +namespace node { +namespace tracing { + +class TraceEventHelper { + public: + static v8::TracingController* GetTracingController(); + static void SetTracingController(v8::TracingController* controller); +}; + +} // namespace tracing +} // namespace node + #endif // ATOM_COMMON_NODE_INCLUDES_H_ From 5e9da04ab77a106201be2aed885d71e6c50762d9 Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Mon, 12 Mar 2018 17:48:08 +0900 Subject: [PATCH 67/98] update libcc ref to disable ScriptForbuddenScope check --- vendor/libchromiumcontent | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/libchromiumcontent b/vendor/libchromiumcontent index 6c174280e97..bf3bb8d2a9e 160000 --- a/vendor/libchromiumcontent +++ b/vendor/libchromiumcontent @@ -1 +1 @@ -Subproject commit 6c174280e97d0974ab8845f6e64f07bc8148f82a +Subproject commit bf3bb8d2a9ef67279303768ff019ae9f7c524e31 From 524f56354cd1c3577d10e7a9db5085a35183981f Mon Sep 17 00:00:00 2001 From: Nitish Sakhawalkar Date: Tue, 13 Mar 2018 12:15:40 +0900 Subject: [PATCH 68/98] Fix webview resize test --- spec/webview-spec.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/spec/webview-spec.js b/spec/webview-spec.js index 73df333dd2b..f6c3f0ac121 100644 --- a/spec/webview-spec.js +++ b/spec/webview-spec.js @@ -1482,10 +1482,17 @@ describe(' tag', function () { webview.addEventListener('resize', function onResize (event) { webview.removeEventListener('resize', onResize) - assert.equal(event.newWidth, 1234) - assert.equal(event.newHeight, 789) + assert.equal(event.newWidth, 100) + assert.equal(event.newHeight, 10) assert.equal(event.target, webview) - done() + webview.addEventListener('resize', function onResizeAgain (event) { + // This will be triggered after setting the new div width and height. + webview.removeEventListener('resize', onResizeAgain) + assert.equal(event.newWidth, 1234) + assert.equal(event.newHeight, 789) + assert.equal(event.target, webview) + done() + }) }) webview.src = `file://${fixtures}/pages/a.html` From e6d38cb64e48d837b84bc8f0e7b649f96a9b52c3 Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Tue, 13 Mar 2018 13:53:40 +0900 Subject: [PATCH 69/98] update node ref to fix --typed_array_max_size_in_heap error --- vendor/node | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/node b/vendor/node index 1d239b60fe8..4a790608d15 160000 --- a/vendor/node +++ b/vendor/node @@ -1 +1 @@ -Subproject commit 1d239b60fe800013dd90753eb77a4ad9168c8652 +Subproject commit 4a790608d1510cbce5939304b8eb01dc6c09545b From 42938de9732b81740a7ce5e7f66090d05abec145 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Tue, 13 Mar 2018 14:21:09 +0900 Subject: [PATCH 70/98] Build with Visual Studio 2017 --- docs/development/build-instructions-windows.md | 4 ++-- script/lib/env_util.py | 4 ++-- script/lib/util.py | 2 +- script/update.py | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/development/build-instructions-windows.md b/docs/development/build-instructions-windows.md index 8d7d0c7eaf2..0e94e2fde5c 100644 --- a/docs/development/build-instructions-windows.md +++ b/docs/development/build-instructions-windows.md @@ -5,8 +5,8 @@ Follow the guidelines below for building Electron on Windows. ## Prerequisites * Windows 7 / Server 2008 R2 or higher -* Visual Studio 2015 Update 3 - [download VS 2015 Community Edition for - free](https://www.visualstudio.com/vs/older-downloads/) +* Visual Studio 2017 Update 3 - [download VS 2017 Community Edition for + free](https://www.visualstudio.com/vs/) * [Python 2.7](http://www.python.org/download/releases/2.7/) * [Node.js](https://nodejs.org/download/) * [Git](http://git-scm.com) diff --git a/script/lib/env_util.py b/script/lib/env_util.py index df759241fe8..85c9ad2e14d 100644 --- a/script/lib/env_util.py +++ b/script/lib/env_util.py @@ -63,9 +63,9 @@ def get_vs_env(vs_version, arch): """ Returns the env object for VS building environment. - The vs_version can be strings like "12.0" (e.g. VS2013), the arch has to + The vs_version can be strings like "2017", the arch has to be one of "x86", "amd64", "arm", "x86_amd64", "x86_arm", "amd64_x86", "amd64_arm", e.g. the args passed to vcvarsall.bat. """ - vsvarsall = "C:\\Program Files (x86)\\Microsoft Visual Studio {0}\\VC\\vcvarsall.bat".format(vs_version) + vsvarsall = "C:\\Program Files (x86)\\Microsoft Visual Studio\\{0}\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat".format(vs_version) return get_environment_from_batch_command([vsvarsall, arch]) diff --git a/script/lib/util.py b/script/lib/util.py index 492c9a411ca..26d24a80a6c 100644 --- a/script/lib/util.py +++ b/script/lib/util.py @@ -246,7 +246,7 @@ def import_vs_env(target_arch): vs_arch = 'amd64_x86' else: vs_arch = 'x86_amd64' - env = get_vs_env('14.0', vs_arch) + env = get_vs_env('2017', vs_arch) os.environ.update(env) diff --git a/script/update.py b/script/update.py index 891cc4389d5..5b4e201d76a 100755 --- a/script/update.py +++ b/script/update.py @@ -61,7 +61,7 @@ def run_gyp(target_arch, component): if PLATFORM == 'linux' and target_arch != get_host_arch(): env['GYP_CROSSCOMPILE'] = '1' elif PLATFORM == 'win32': - env['GYP_MSVS_VERSION'] = '2015' + env['GYP_MSVS_VERSION'] = '2017' python = sys.executable if sys.platform == 'cygwin': # Force using win32 python on cygwin. From 624e09533c39d451d54584826ddbc5dc3bcfa1e0 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Tue, 13 Mar 2018 15:23:19 +0900 Subject: [PATCH 71/98] Avoid using deprecated skia size methods --- atom/common/api/atom_api_native_image.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/atom/common/api/atom_api_native_image.cc b/atom/common/api/atom_api_native_image.cc index ed736dabd00..efccaa408ed 100644 --- a/atom/common/api/atom_api_native_image.cc +++ b/atom/common/api/atom_api_native_image.cc @@ -221,7 +221,7 @@ NativeImage::NativeImage(v8::Isolate* isolate, const gfx::Image& image) Init(isolate); if (image_.HasRepresentation(gfx::Image::kImageRepSkia)) { isolate->AdjustAmountOfExternalAllocatedMemory( - image_.ToImageSkia()->bitmap()->computeSize64()); + image_.ToImageSkia()->bitmap()->computeByteSize()); } MarkHighMemoryUsage(); } @@ -236,7 +236,7 @@ NativeImage::NativeImage(v8::Isolate* isolate, const base::FilePath& hicon_path) Init(isolate); if (image_.HasRepresentation(gfx::Image::kImageRepSkia)) { isolate->AdjustAmountOfExternalAllocatedMemory( - image_.ToImageSkia()->bitmap()->computeSize64()); + image_.ToImageSkia()->bitmap()->computeByteSize()); } MarkHighMemoryUsage(); } @@ -245,7 +245,7 @@ NativeImage::NativeImage(v8::Isolate* isolate, const base::FilePath& hicon_path) NativeImage::~NativeImage() { if (image_.HasRepresentation(gfx::Image::kImageRepSkia)) { isolate()->AdjustAmountOfExternalAllocatedMemory( - - image_.ToImageSkia()->bitmap()->computeSize64()); + -static_cast(image_.ToImageSkia()->bitmap()->computeByteSize())); } } @@ -302,7 +302,7 @@ v8::Local NativeImage::ToBitmap(mate::Arguments* args) { return node::Buffer::New(args->isolate(), 0).ToLocalChecked(); return node::Buffer::Copy(args->isolate(), reinterpret_cast(ref->pixels()), - bitmap.getSafeSize()).ToLocalChecked(); + bitmap.computeByteSize()).ToLocalChecked(); } v8::Local NativeImage::ToJPEG(v8::Isolate* isolate, int quality) { @@ -340,7 +340,7 @@ v8::Local NativeImage::GetBitmap(mate::Arguments* args) { return node::Buffer::New(args->isolate(), 0).ToLocalChecked(); return node::Buffer::New(args->isolate(), reinterpret_cast(ref->pixels()), - bitmap.getSafeSize(), + bitmap.computeByteSize(), &Noop, nullptr).ToLocalChecked(); } From b6b7707dc35c3241291a66cdf33d8c4cedbdf072 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Tue, 13 Mar 2018 16:19:06 +0900 Subject: [PATCH 72/98] Fix Windows linking error --- common.gypi | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/common.gypi b/common.gypi index 281529eb9b3..5c6677b333e 100644 --- a/common.gypi +++ b/common.gypi @@ -178,6 +178,22 @@ '-ldbghelp.lib', '-lshlwapi.lib', ], + 'msvs_settings': { + # Change location of some hard-coded paths. + 'VCLinkerTool': { + 'AdditionalOptions!': [ + '/WHOLEARCHIVE:<(PRODUCT_DIR)\\lib\\zlib<(STATIC_LIB_SUFFIX)', + '/WHOLEARCHIVE:<(PRODUCT_DIR)\\lib\\libuv<(STATIC_LIB_SUFFIX)', + '/WHOLEARCHIVE:<(PRODUCT_DIR)\\lib\\libopenssl<(openssl_product)', + '/WHOLEARCHIVE:<(PRODUCT_DIR)\\lib\\<(openssl_product)', + ], + 'AdditionalOptions': [ + '/WHOLEARCHIVE:<(PRODUCT_DIR)\\obj\\vendor\\node\\deps\\zlib\\zlib<(STATIC_LIB_SUFFIX)', + '/WHOLEARCHIVE:<(PRODUCT_DIR)\\obj\\vendor\\node\\deps\\uv\\libuv<(STATIC_LIB_SUFFIX)', + '/WHOLEARCHIVE:<(PRODUCT_DIR)\\obj\\vendor\\node\\deps\\openssl\\openssl<(STATIC_LIB_SUFFIX)', + ], + }, + }, }], ['OS=="linux" and libchromiumcontent_component==0', { # Prevent the linker from stripping symbols. From 639be7f7bcdd6295f6abe945a2f497261772ae5c Mon Sep 17 00:00:00 2001 From: Aleksei Kuzmin Date: Tue, 13 Mar 2018 15:38:55 +0900 Subject: [PATCH 73/98] Simplify transparent backgrounds https://chromium-review.googlesource.com/669646 --- atom/browser/osr/osr_render_widget_host_view.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/atom/browser/osr/osr_render_widget_host_view.cc b/atom/browser/osr/osr_render_widget_host_view.cc index 10075b2f9eb..7bc7c69afea 100644 --- a/atom/browser/osr/osr_render_widget_host_view.cc +++ b/atom/browser/osr/osr_render_widget_host_view.cc @@ -923,9 +923,9 @@ bool OffScreenRenderWidgetHostView::InstallTransparency() { if (transparent_) { SetBackgroundColor(SkColor()); #if defined(OS_MACOSX) - browser_compositor_->SetHasTransparentBackground(true); + browser_compositor_->SetBackgroundColor(SK_ColorTRANSPARENT); #else - compositor_->SetHostHasTransparentBackground(true); + compositor_->SetBackgroundColor(SK_ColorTRANSPARENT); #endif return true; } From d3afb595dcabc0d95602f72a86fcf4ccc056b188 Mon Sep 17 00:00:00 2001 From: Aleksei Kuzmin Date: Tue, 13 Mar 2018 16:06:50 +0900 Subject: [PATCH 74/98] Tab Capture in VIZ: CopyOutputRequest/Result API changes. https://chromium-review.googlesource.com/637003 --- atom/browser/osr/osr_render_widget_host_view.cc | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/atom/browser/osr/osr_render_widget_host_view.cc b/atom/browser/osr/osr_render_widget_host_view.cc index 7bc7c69afea..8a68b601d59 100644 --- a/atom/browser/osr/osr_render_widget_host_view.cc +++ b/atom/browser/osr/osr_render_widget_host_view.cc @@ -128,8 +128,9 @@ class AtomCopyFrameGenerator { if (!view_->render_widget_host() || !view_->IsPainting()) return; - std::unique_ptr request = - viz::CopyOutputRequest::CreateBitmapRequest(base::Bind( + auto request = std::make_unique( + viz::CopyOutputRequest::ResultFormat::RGBA_BITMAP, + base::BindOnce( &AtomCopyFrameGenerator::CopyFromCompositingSurfaceHasResult, weak_ptr_factory_.GetWeakPtr(), damage_rect)); @@ -153,9 +154,9 @@ class AtomCopyFrameGenerator { return; } - DCHECK(result->HasBitmap()); - std::unique_ptr source = result->TakeBitmap(); - DCHECK(source); + DCHECK(!result->IsEmpty()); + auto source = std::make_unique(result->AsSkBitmap()); + DCHECK(source->readyToDraw()); if (source) { base::AutoLock autolock(lock_); std::shared_ptr bitmap(source.release()); From d90b600bc121eb35d891bf19cc46590a7ca01ec2 Mon Sep 17 00:00:00 2001 From: John Kleinschmidt Date: Tue, 13 Mar 2018 10:43:31 -0400 Subject: [PATCH 75/98] Use visual studio 17 image --- appveyor-test.yml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 appveyor-test.yml diff --git a/appveyor-test.yml b/appveyor-test.yml new file mode 100644 index 00000000000..76a61ddc37d --- /dev/null +++ b/appveyor-test.yml @@ -0,0 +1,2 @@ +build_cloud: libcc-20 +image: libcc-20-vs2017 From d58b36612358c07fb425deed468b6991607b3e73 Mon Sep 17 00:00:00 2001 From: John Kleinschmidt Date: Tue, 13 Mar 2018 11:08:59 -0400 Subject: [PATCH 76/98] Add whole appveyor config --- appveyor-test.yml | 76 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/appveyor-test.yml b/appveyor-test.yml index 76a61ddc37d..2fb4fb8788f 100644 --- a/appveyor-test.yml +++ b/appveyor-test.yml @@ -1,2 +1,78 @@ +version: 1.0.{build} +branches: + except: + - /^release$|^release-\d-\d-x$/ build_cloud: libcc-20 +skip_branch_with_pr: true image: libcc-20-vs2017 +clone_folder: c:\build +environment: + DISABLE_CRASH_REPORTER_TESTS: true + matrix: + - TARGET_ARCH: ia32 + - TARGET_ARCH: x64 +build_script: +- ps: >- + Add-Path "$env:ProgramFiles (x86)\Windows Kits\10\Debuggers\x64" + + $env:path = "$env:ProgramFiles (x86)\Windows Kits\10\Debuggers\x64;$env:path" + + $Message = (git log --format=%B -n 1 HEAD) | Out-String + + if ((Test-Path Env:\RUN_RELEASE_BUILD)) { + $env:ELECTRON_RELEASE = '1' + Write-Output "release build triggered from api" + } + + if ((Test-Path Env:\ELECTRON_RELEASE)) { + Write-Output "Running release build" + python script\bootstrap.py --target_arch=$env:TARGET_ARCH + python script\build.py -c R + python script\create-dist.py + } else { + Write-Output "Running debug build" + python script\bootstrap.py --target_arch=$env:TARGET_ARCH --dev + python script\build.py -c D + } + + if ($? -ne 'True') { + throw "Build failed with exit code $?" + } else { + "Build succeeded." + } +test_script: +- ps: >- + if (Test-Path Env:\ELECTRON_RELEASE) { + Write-Output "Skipping tests for release build" + } else { + Write-Output "Running tests for debug build" + python script\test.py --ci + if ($LASTEXITCODE -ne '0') { + throw "Tests failed with exit code $LASTEXITCODE" + } else { + Write-Output "Tests succeeded." + } + python script\verify-ffmpeg.py + + if ($LASTEXITCODE -ne '0') { + throw "Verify ffmpeg failed with exit code $LASTEXITCODE" + } else { + "Verify ffmpeg succeeded." + } + } +artifacts: +- path: test-results.xml + name: test-results.xml +deploy_script: +- ps: >- + if (Test-Path Env:\ELECTRON_RELEASE) { + if (Test-Path Env:\RUN_RELEASE_BUILD) { + Write-Output "Uploading Electron release distribution to s3" + & python script\upload.py --upload_to_s3 + } else { + Write-Output "Uploading Electron release distribution to github releases" + & python script\upload.py + } + } else { + Write-Output "Skipping upload distribution because build is not for release" + } \ No newline at end of file From dfc4dbdbd3a1b3ea11780cbd932953ef532c9748 Mon Sep 17 00:00:00 2001 From: John Kleinschmidt Date: Tue, 13 Mar 2018 11:19:44 -0400 Subject: [PATCH 77/98] Drop clone folder --- appveyor-test.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/appveyor-test.yml b/appveyor-test.yml index 2fb4fb8788f..1ee6113e6c3 100644 --- a/appveyor-test.yml +++ b/appveyor-test.yml @@ -5,7 +5,6 @@ branches: build_cloud: libcc-20 skip_branch_with_pr: true image: libcc-20-vs2017 -clone_folder: c:\build environment: DISABLE_CRASH_REPORTER_TESTS: true matrix: @@ -75,4 +74,4 @@ deploy_script: } } else { Write-Output "Skipping upload distribution because build is not for release" - } \ No newline at end of file + } From 750c3d05aad68642a5ec5507b03f12f319d5960d Mon Sep 17 00:00:00 2001 From: John Kleinschmidt Date: Tue, 13 Mar 2018 11:34:50 -0400 Subject: [PATCH 78/98] debug build issues --- appveyor-test.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/appveyor-test.yml b/appveyor-test.yml index 1ee6113e6c3..dbfd30371ca 100644 --- a/appveyor-test.yml +++ b/appveyor-test.yml @@ -7,6 +7,8 @@ skip_branch_with_pr: true image: libcc-20-vs2017 environment: DISABLE_CRASH_REPORTER_TESTS: true + APPVEYOR_RDP_PASSWORD: + secure: RCKgcu5XLpoU2i08YuN/btpiqqjS2/gN1ZZHfLW8F6o= matrix: - TARGET_ARCH: ia32 - TARGET_ARCH: x64 @@ -75,3 +77,5 @@ deploy_script: } else { Write-Output "Skipping upload distribution because build is not for release" } +on_finish: + - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) From d5ecbfc5391c114a702fc669acd972841fc1d611 Mon Sep 17 00:00:00 2001 From: Aleksei Kuzmin Date: Wed, 14 Mar 2018 11:20:41 +0900 Subject: [PATCH 79/98] spec: Do not assume en-US locale to be the current --- spec/chromium-spec.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spec/chromium-spec.js b/spec/chromium-spec.js index 3f78c5c533c..1f5b8c99fa7 100644 --- a/spec/chromium-spec.js +++ b/spec/chromium-spec.js @@ -29,6 +29,7 @@ describe('chromium feature', () => { describe('command line switches', () => { describe('--lang switch', () => { + const currentLocale = app.getLocale() const testLocale = (locale, result, done) => { const appPath = path.join(__dirname, 'fixtures', 'api', 'locale-check') const electronPath = remote.getGlobal('process').execPath @@ -44,7 +45,7 @@ describe('chromium feature', () => { } it('should set the locale', (done) => testLocale('fr', 'fr', done)) - it('should not set an invalid locale', (done) => testLocale('asdfkl', 'en-US', done)) + it('should not set an invalid locale', (done) => testLocale('asdfkl', currentLocale, done)) }) }) From 246f6318e42a35f285e361f5bd8a40373fb3c5de Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Wed, 14 Mar 2018 16:04:19 +0900 Subject: [PATCH 80/98] Fix release build on Windows --- brightray/brightray.gyp | 1 + vendor/libchromiumcontent | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/brightray/brightray.gyp b/brightray/brightray.gyp index 532b831e98e..6a7520288f5 100644 --- a/brightray/brightray.gyp +++ b/brightray/brightray.gyp @@ -395,6 +395,7 @@ 'dbghelp.lib', 'dwmapi.lib', 'gdi32.lib', + 'hid.lib', 'netapi32.lib', 'oleacc.lib', 'user32.lib', diff --git a/vendor/libchromiumcontent b/vendor/libchromiumcontent index bf3bb8d2a9e..a78780ff0c3 160000 --- a/vendor/libchromiumcontent +++ b/vendor/libchromiumcontent @@ -1 +1 @@ -Subproject commit bf3bb8d2a9ef67279303768ff019ae9f7c524e31 +Subproject commit a78780ff0c3f69bf20ad4adc1c377a7f7218c7e0 From f9de29ed8ccd56a29e5e8d6894b7a2dd7b2a942a Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Tue, 13 Mar 2018 14:28:06 +0900 Subject: [PATCH 81/98] Enable node crypto spec --- spec/node-spec.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/spec/node-spec.js b/spec/node-spec.js index 56aa5f5d959..f053aa4dbad 100644 --- a/spec/node-spec.js +++ b/spec/node-spec.js @@ -321,9 +321,7 @@ describe('node feature', () => { assert.equal(buffer.length, 4096) }) - // TODO(deepak1556): Disabled during Ch63 upgrade. - // Fix it and enable back. - xit('does not crash for crypto operations', () => { + it('does not crash for crypto operations', () => { const crypto = require('crypto') const data = 'lG9E+/g4JmRmedDAnihtBD4Dfaha/GFOjd+xUOQI05UtfVX3DjUXvrS98p7kZQwY3LNhdiFo7MY5rGft8yBuDhKuNNag9vRx/44IuClDhdQ=' const key = 'q90K9yBqhWZnAMCMTOJfPQ==' From 97eb7f2c98b3d73a30477bf01fab65a17ba26d25 Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Wed, 14 Mar 2018 16:55:59 +0900 Subject: [PATCH 82/98] REVIEW: ContentBrowserClient now provides geolocation api key and request context --- atom/browser/atom_browser_client.cc | 80 +++++++++++++++++++++++++++-- atom/browser/atom_browser_client.h | 9 ++++ 2 files changed, 84 insertions(+), 5 deletions(-) diff --git a/atom/browser/atom_browser_client.cc b/atom/browser/atom_browser_client.cc index 4ffaaab5b48..705d1fbbc9c 100644 --- a/atom/browser/atom_browser_client.cc +++ b/atom/browser/atom_browser_client.cc @@ -22,6 +22,7 @@ #include "atom/browser/web_contents_permission_helper.h" #include "atom/browser/web_contents_preferences.h" #include "atom/browser/window_list.h" +#include "atom/common/google_api_key.h" #include "atom/common/options_switches.h" #include "base/command_line.h" #include "base/files/file_util.h" @@ -46,10 +47,15 @@ #include "content/public/common/url_constants.h" #include "content/public/common/web_preferences.h" #include "net/ssl/ssl_cert_request_info.h" +#include "net/url_request/url_request_context.h" +#include "net/url_request/url_request_context_builder.h" +#include "net/url_request/url_request_context_getter.h" #include "ppapi/host/ppapi_host.h" #include "ui/base/l10n/l10n_util.h" #include "v8/include/v8.h" +using content::BrowserThread; + namespace atom { namespace { @@ -63,6 +69,45 @@ std::string g_custom_service_worker_schemes = ""; void Noop(scoped_refptr) { } +class GeoURLRequestContextGetter : public net::URLRequestContextGetter { + public: + GeoURLRequestContextGetter() = default; + ~GeoURLRequestContextGetter() override { + if (BrowserThread::IsMessageLoopValid(BrowserThread::IO)) { + BrowserThread::PostTask( + BrowserThread::IO, FROM_HERE, + base::Bind(&GeoURLRequestContextGetter::NotifyContextShutdownOnIO, + this)); + } + } + + void NotifyContextShutdownOnIO() { + url_request_context_.reset(); + net::URLRequestContextGetter::NotifyContextShuttingDown(); + } + + net::URLRequestContext* GetURLRequestContext() override { + DCHECK_CURRENTLY_ON(BrowserThread::IO); + if (!url_request_context_.get()) { + net::URLRequestContextBuilder builder; + builder.set_proxy_config_service( + net::ProxyService::CreateSystemProxyConfigService( + BrowserThread::GetTaskRunnerForThread(BrowserThread::IO))); + url_request_context_ = builder.Build(); + } + return url_request_context_.get(); + } + + scoped_refptr GetNetworkTaskRunner() + const override { + return BrowserThread::GetTaskRunnerForThread(BrowserThread::IO); + } + + private: + std::unique_ptr url_request_context_; + DISALLOW_COPY_AND_ASSIGN(GeoURLRequestContextGetter); +}; + } // namespace // static @@ -75,8 +120,9 @@ void AtomBrowserClient::SetCustomServiceWorkerSchemes( g_custom_service_worker_schemes = base::JoinString(schemes, ","); } -AtomBrowserClient::AtomBrowserClient() : delegate_(nullptr) { -} +AtomBrowserClient::AtomBrowserClient() + : delegate_(nullptr), + geo_request_context_getter_(new GeoURLRequestContextGetter) {} AtomBrowserClient::~AtomBrowserClient() { } @@ -262,8 +308,8 @@ void AtomBrowserClient::OverrideSiteInstanceForNavigation( // when this function returns. // FIXME(zcbenz): We should adjust // OverrideSiteInstanceForNavigation's interface to solve this. - content::BrowserThread::PostTask( - content::BrowserThread::UI, FROM_HERE, + BrowserThread::PostTask( + BrowserThread::UI, FROM_HERE, base::Bind(&Noop, base::RetainedRef(site_instance))); // Remember the original web contents for the pending renderer process. @@ -338,6 +384,30 @@ void AtomBrowserClient::DidCreatePpapiPlugin( base::WrapUnique(new chrome::ChromeBrowserPepperHostFactory(host))); } +scoped_refptr +AtomBrowserClient::GetGeoRequestContextGetterFromUIThread() { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + return geo_request_context_getter_; +} + +void AtomBrowserClient::GetGeolocationRequestContext( + base::OnceCallback)> + callback) { + BrowserThread::PostTaskAndReplyWithResult( + BrowserThread::UI, FROM_HERE, + base::BindOnce(&AtomBrowserClient::GetGeoRequestContextGetterFromUIThread, + base::Unretained(this)), + std::move(callback)); +} + +std::string AtomBrowserClient::GetGeolocationApiKey() { + std::unique_ptr env(base::Environment::Create()); + std::string api_key; + if (!env->GetVar("GOOGLE_API_KEY", &api_key)) + api_key = GOOGLEAPIS_API_KEY; + return api_key; +} + content::QuotaPermissionContext* AtomBrowserClient::CreateQuotaPermissionContext() { return new AtomQuotaPermissionContext; @@ -396,7 +466,7 @@ bool AtomBrowserClient::CanCreateWindow( bool user_gesture, bool opener_suppressed, bool* no_javascript_access) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + DCHECK_CURRENTLY_ON(BrowserThread::UI); int opener_render_process_id = opener->GetProcess()->GetID(); diff --git a/atom/browser/atom_browser_client.h b/atom/browser/atom_browser_client.h index 046641df50c..8e085da58ac 100644 --- a/atom/browser/atom_browser_client.h +++ b/atom/browser/atom_browser_client.h @@ -21,6 +21,7 @@ class ClientCertificateDelegate; namespace net { class SSLCertRequestInfo; +class URLRequestContextGetter; } namespace atom { @@ -62,6 +63,10 @@ class AtomBrowserClient : public brightray::BrowserClient, void AppendExtraCommandLineSwitches(base::CommandLine* command_line, int child_process_id) override; void DidCreatePpapiPlugin(content::BrowserPpapiHost* browser_host) override; + void GetGeolocationRequestContext( + base::OnceCallback)> + callback) override; + std::string GetGeolocationApiKey() override; content::QuotaPermissionContext* CreateQuotaPermissionContext() override; void AllowCertificateError( content::WebContents* web_contents, @@ -129,6 +134,8 @@ class AtomBrowserClient : public brightray::BrowserClient, bool IsRendererSandboxed(int process_id); bool RendererUsesNativeWindowOpen(int process_id); bool RendererDisablesPopups(int process_id); + scoped_refptr + GetGeoRequestContextGetterFromUIThread(); // pending_render_process => web contents. std::map pending_processes_; @@ -144,6 +151,8 @@ class AtomBrowserClient : public brightray::BrowserClient, Delegate* delegate_; + scoped_refptr geo_request_context_getter_; + DISALLOW_COPY_AND_ASSIGN(AtomBrowserClient); }; From 9702898dcdee301c86e8c63cb43c267fafdbbf6d Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Wed, 14 Mar 2018 16:58:49 +0900 Subject: [PATCH 83/98] AccessTokenStore is only needed to initialize network location service --- atom/browser/atom_access_token_store.cc | 83 ------------------------- atom/browser/atom_access_token_store.h | 14 ++--- filenames.gypi | 1 - 3 files changed, 4 insertions(+), 94 deletions(-) delete mode 100644 atom/browser/atom_access_token_store.cc diff --git a/atom/browser/atom_access_token_store.cc b/atom/browser/atom_access_token_store.cc deleted file mode 100644 index bf4e4ecdc87..00000000000 --- a/atom/browser/atom_access_token_store.cc +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (c) 2014 GitHub, Inc. -// Use of this source code is governed by the MIT license that can be -// found in the LICENSE file. - -#include "atom/browser/atom_access_token_store.h" - -#include -#include - -#include "atom/common/google_api_key.h" -#include "base/environment.h" -#include "content/public/browser/browser_thread.h" -#include "device/geolocation/geolocation_provider.h" -#include "net/url_request/url_request_context.h" -#include "net/url_request/url_request_context_builder.h" -#include "net/url_request/url_request_context_getter.h" - -using content::BrowserThread; - -namespace atom { - -namespace internal { - -class GeoURLRequestContextGetter : public net::URLRequestContextGetter { - public: - net::URLRequestContext* GetURLRequestContext() override { - DCHECK_CURRENTLY_ON(BrowserThread::IO); - if (!url_request_context_.get()) { - net::URLRequestContextBuilder builder; - builder.set_proxy_config_service( - net::ProxyService::CreateSystemProxyConfigService( - BrowserThread::GetTaskRunnerForThread(BrowserThread::IO))); - url_request_context_ = builder.Build(); - } - return url_request_context_.get(); - } - - scoped_refptr GetNetworkTaskRunner() - const override { - return BrowserThread::GetTaskRunnerForThread(BrowserThread::IO); - } - - private: - friend class atom::AtomAccessTokenStore; - - GeoURLRequestContextGetter() {} - ~GeoURLRequestContextGetter() override {} - - std::unique_ptr url_request_context_; - DISALLOW_COPY_AND_ASSIGN(GeoURLRequestContextGetter); -}; - -} // namespace internal - -AtomAccessTokenStore::AtomAccessTokenStore() - : request_context_getter_(new internal::GeoURLRequestContextGetter) { -} - -AtomAccessTokenStore::~AtomAccessTokenStore() { -} - -void AtomAccessTokenStore::LoadAccessTokens( - const LoadAccessTokensCallback& callback) { - std::unique_ptr env(base::Environment::Create()); - std::string api_key; - if (!env->GetVar("GOOGLE_API_KEY", &api_key)) - api_key = GOOGLEAPIS_API_KEY; - // Equivalent to access_token_map[kGeolocationProviderURL]. - // Somehow base::string16 is causing compilation errors when used in a pair - // of std::map on Linux, this can work around it. - device::AccessTokenStore::AccessTokenMap access_token_map; - std::pair token_pair; - token_pair.first = GURL(GOOGLEAPIS_ENDPOINT + api_key); - access_token_map.insert(token_pair); - - callback.Run(access_token_map, request_context_getter_.get()); -} - -void AtomAccessTokenStore::SaveAccessToken(const GURL& server_url, - const base::string16& access_token) { -} - -} // namespace atom diff --git a/atom/browser/atom_access_token_store.h b/atom/browser/atom_access_token_store.h index 820ceddce4f..8440e16cee9 100644 --- a/atom/browser/atom_access_token_store.h +++ b/atom/browser/atom_access_token_store.h @@ -9,23 +9,17 @@ namespace atom { -namespace internal { -class GeoURLRequestContextGetter; -} - class AtomAccessTokenStore : public device::AccessTokenStore { public: - AtomAccessTokenStore(); - ~AtomAccessTokenStore(); + AtomAccessTokenStore() = default; + ~AtomAccessTokenStore() = default; // device::AccessTokenStore: - void LoadAccessTokens( - const LoadAccessTokensCallback& callback) override; + void LoadAccessTokens(const LoadAccessTokensCallback& callback) override {} void SaveAccessToken(const GURL& server_url, - const base::string16& access_token) override; + const base::string16& access_token) override {} private: - scoped_refptr request_context_getter_; DISALLOW_COPY_AND_ASSIGN(AtomAccessTokenStore); }; diff --git a/filenames.gypi b/filenames.gypi index e051b4707e5..ee1d5ec0545 100644 --- a/filenames.gypi +++ b/filenames.gypi @@ -180,7 +180,6 @@ 'atom/browser/auto_updater.cc', 'atom/browser/auto_updater.h', 'atom/browser/auto_updater_mac.mm', - 'atom/browser/atom_access_token_store.cc', 'atom/browser/atom_access_token_store.h', 'atom/browser/atom_blob_reader.cc', 'atom/browser/atom_blob_reader.h', From cb4c54eec1c6d6744dcf77fbcdb3855bf65a37ce Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Thu, 15 Mar 2018 11:25:52 +0900 Subject: [PATCH 84/98] Use 60 as module version for V8 6.3 --- vendor/node | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/node b/vendor/node index 4a790608d15..584e6370849 160000 --- a/vendor/node +++ b/vendor/node @@ -1 +1 @@ -Subproject commit 4a790608d1510cbce5939304b8eb01dc6c09545b +Subproject commit 584e6370849aa73025e6206109f25f441cb6cf9f From 97fcf7079b50c15c4ba86f2991fdc6d7a2990a1e Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Thu, 15 Mar 2018 11:26:27 +0900 Subject: [PATCH 85/98] Update chrome_version.h --- atom/common/chrome_version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atom/common/chrome_version.h b/atom/common/chrome_version.h index 23bdd6adb77..03d72ca70f5 100644 --- a/atom/common/chrome_version.h +++ b/atom/common/chrome_version.h @@ -8,7 +8,7 @@ #ifndef ATOM_COMMON_CHROME_VERSION_H_ #define ATOM_COMMON_CHROME_VERSION_H_ -#define CHROME_VERSION_STRING "63.0.3239.132" +#define CHROME_VERSION_STRING "63.0.3239.150" #define CHROME_VERSION "v" CHROME_VERSION_STRING #endif // ATOM_COMMON_CHROME_VERSION_H_ From c3f8f6bc427c34bff7e121afb2b5c93175a973d0 Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Thu, 15 Mar 2018 15:29:16 +0900 Subject: [PATCH 86/98] re-use request context from IOThread --- atom/browser/atom_browser_client.cc | 62 +++----------------------- atom/browser/atom_browser_client.h | 5 --- brightray/browser/browser_main_parts.h | 2 + brightray/browser/io_thread.cc | 7 ++- brightray/browser/io_thread.h | 6 +++ 5 files changed, 20 insertions(+), 62 deletions(-) diff --git a/atom/browser/atom_browser_client.cc b/atom/browser/atom_browser_client.cc index 705d1fbbc9c..07f74b49da6 100644 --- a/atom/browser/atom_browser_client.cc +++ b/atom/browser/atom_browser_client.cc @@ -47,9 +47,6 @@ #include "content/public/common/url_constants.h" #include "content/public/common/web_preferences.h" #include "net/ssl/ssl_cert_request_info.h" -#include "net/url_request/url_request_context.h" -#include "net/url_request/url_request_context_builder.h" -#include "net/url_request/url_request_context_getter.h" #include "ppapi/host/ppapi_host.h" #include "ui/base/l10n/l10n_util.h" #include "v8/include/v8.h" @@ -69,45 +66,6 @@ std::string g_custom_service_worker_schemes = ""; void Noop(scoped_refptr) { } -class GeoURLRequestContextGetter : public net::URLRequestContextGetter { - public: - GeoURLRequestContextGetter() = default; - ~GeoURLRequestContextGetter() override { - if (BrowserThread::IsMessageLoopValid(BrowserThread::IO)) { - BrowserThread::PostTask( - BrowserThread::IO, FROM_HERE, - base::Bind(&GeoURLRequestContextGetter::NotifyContextShutdownOnIO, - this)); - } - } - - void NotifyContextShutdownOnIO() { - url_request_context_.reset(); - net::URLRequestContextGetter::NotifyContextShuttingDown(); - } - - net::URLRequestContext* GetURLRequestContext() override { - DCHECK_CURRENTLY_ON(BrowserThread::IO); - if (!url_request_context_.get()) { - net::URLRequestContextBuilder builder; - builder.set_proxy_config_service( - net::ProxyService::CreateSystemProxyConfigService( - BrowserThread::GetTaskRunnerForThread(BrowserThread::IO))); - url_request_context_ = builder.Build(); - } - return url_request_context_.get(); - } - - scoped_refptr GetNetworkTaskRunner() - const override { - return BrowserThread::GetTaskRunnerForThread(BrowserThread::IO); - } - - private: - std::unique_ptr url_request_context_; - DISALLOW_COPY_AND_ASSIGN(GeoURLRequestContextGetter); -}; - } // namespace // static @@ -120,9 +78,7 @@ void AtomBrowserClient::SetCustomServiceWorkerSchemes( g_custom_service_worker_schemes = base::JoinString(schemes, ","); } -AtomBrowserClient::AtomBrowserClient() - : delegate_(nullptr), - geo_request_context_getter_(new GeoURLRequestContextGetter) {} +AtomBrowserClient::AtomBrowserClient() : delegate_(nullptr) {} AtomBrowserClient::~AtomBrowserClient() { } @@ -384,20 +340,14 @@ void AtomBrowserClient::DidCreatePpapiPlugin( base::WrapUnique(new chrome::ChromeBrowserPepperHostFactory(host))); } -scoped_refptr -AtomBrowserClient::GetGeoRequestContextGetterFromUIThread() { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - return geo_request_context_getter_; -} - void AtomBrowserClient::GetGeolocationRequestContext( base::OnceCallback)> callback) { - BrowserThread::PostTaskAndReplyWithResult( - BrowserThread::UI, FROM_HERE, - base::BindOnce(&AtomBrowserClient::GetGeoRequestContextGetterFromUIThread, - base::Unretained(this)), - std::move(callback)); + auto io_thread = AtomBrowserMainParts::Get()->io_thread(); + auto context = io_thread->GetRequestContext(); + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, + base::BindOnce(std::move(callback), base::RetainedRef(context))); } std::string AtomBrowserClient::GetGeolocationApiKey() { diff --git a/atom/browser/atom_browser_client.h b/atom/browser/atom_browser_client.h index 8e085da58ac..ceacd354ab3 100644 --- a/atom/browser/atom_browser_client.h +++ b/atom/browser/atom_browser_client.h @@ -21,7 +21,6 @@ class ClientCertificateDelegate; namespace net { class SSLCertRequestInfo; -class URLRequestContextGetter; } namespace atom { @@ -134,8 +133,6 @@ class AtomBrowserClient : public brightray::BrowserClient, bool IsRendererSandboxed(int process_id); bool RendererUsesNativeWindowOpen(int process_id); bool RendererDisablesPopups(int process_id); - scoped_refptr - GetGeoRequestContextGetterFromUIThread(); // pending_render_process => web contents. std::map pending_processes_; @@ -151,8 +148,6 @@ class AtomBrowserClient : public brightray::BrowserClient, Delegate* delegate_; - scoped_refptr geo_request_context_getter_; - DISALLOW_COPY_AND_ASSIGN(AtomBrowserClient); }; diff --git a/brightray/browser/browser_main_parts.h b/brightray/browser/browser_main_parts.h index f69682ce516..673d50228f1 100644 --- a/brightray/browser/browser_main_parts.h +++ b/brightray/browser/browser_main_parts.h @@ -35,6 +35,8 @@ class BrowserMainParts : public content::BrowserMainParts { BrowserMainParts(); ~BrowserMainParts(); + IOThread* io_thread() const { return io_thread_.get(); } + protected: // content::BrowserMainParts: void PreEarlyInitialization() override; diff --git a/brightray/browser/io_thread.cc b/brightray/browser/io_thread.cc index f20fb0bf9eb..c96aa980651 100644 --- a/brightray/browser/io_thread.cc +++ b/brightray/browser/io_thread.cc @@ -8,6 +8,7 @@ #include "net/proxy/proxy_service.h" #include "net/url_request/url_request_context.h" #include "net/url_request/url_request_context_builder.h" +#include "net/url_request/url_request_context_getter.h" #if defined(USE_NSS_CERTS) #include "net/cert_net/nss_ocsp.h" @@ -28,8 +29,10 @@ IOThread::~IOThread() { void IOThread::Init() { net::URLRequestContextBuilder builder; builder.set_proxy_service(net::ProxyService::CreateDirect()); - builder.DisableHttpCache(); url_request_context_ = builder.Build(); + url_request_context_getter_ = new net::TrivialURLRequestContextGetter( + url_request_context_.get(), base::ThreadTaskRunnerHandle::Get()); + url_request_context_getter_->AddRef(); #if defined(USE_NSS_CERTS) net::SetMessageLoopForNSSHttpIO(); @@ -42,6 +45,8 @@ void IOThread::CleanUp() { net::ShutdownNSSHttpIO(); net::SetURLRequestContextForNSSHttpIO(nullptr); #endif + // Explicitly release before the IO thread gets destroyed. + url_request_context_getter_->Release(); url_request_context_.reset(); } diff --git a/brightray/browser/io_thread.h b/brightray/browser/io_thread.h index c04f09fa8a9..866008eb4e4 100644 --- a/brightray/browser/io_thread.h +++ b/brightray/browser/io_thread.h @@ -12,6 +12,7 @@ namespace net { class URLRequestContext; +class URLRequestContextGetter; } namespace brightray { @@ -21,6 +22,10 @@ class IOThread : public content::BrowserThreadDelegate { IOThread(); ~IOThread() override; + net::URLRequestContextGetter* GetRequestContext() { + return url_request_context_getter_; + } + protected: // BrowserThreadDelegate Implementation, runs on the IO thread. void Init() override; @@ -28,6 +33,7 @@ class IOThread : public content::BrowserThreadDelegate { private: std::unique_ptr url_request_context_; + net::URLRequestContextGetter* url_request_context_getter_; DISALLOW_COPY_AND_ASSIGN(IOThread); }; From 94fce43ed918cd5a4af60f0fce2cd746dce49c19 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Thu, 15 Mar 2018 15:16:30 +0900 Subject: [PATCH 87/98] Emit document-start for the correct env This fixes the crash in RunScriptsAtDocumentStart when "affinity" option is specified. Previously we were assuming only one main frame exists in the renderer process, but the "affinity" option breaks this option. There is also a bug that "node::Environment::GetCurrent" does not return nullptr for context without a env in it, I'm not sure whether it is a bug of Node or V8. --- atom/renderer/atom_renderer_client.cc | 40 +++++++++++++++++---------- atom/renderer/atom_renderer_client.h | 17 ++++++++++++ 2 files changed, 43 insertions(+), 14 deletions(-) diff --git a/atom/renderer/atom_renderer_client.cc b/atom/renderer/atom_renderer_client.cc index 5bcf7e0f710..2ba4e9dc659 100644 --- a/atom/renderer/atom_renderer_client.cc +++ b/atom/renderer/atom_renderer_client.cc @@ -64,21 +64,19 @@ void AtomRendererClient::RenderViewCreated(content::RenderView* render_view) { void AtomRendererClient::RunScriptsAtDocumentStart( content::RenderFrame* render_frame) { // Inform the document start pharse. - node::Environment* env = node_bindings_->uv_env(); - if (env) { - v8::HandleScope handle_scope(env->isolate()); + v8::HandleScope handle_scope(v8::Isolate::GetCurrent()); + node::Environment* env = GetEnvironment(render_frame); + if (env) mate::EmitEvent(env->isolate(), env->process_object(), "document-start"); - } } void AtomRendererClient::RunScriptsAtDocumentEnd( content::RenderFrame* render_frame) { // Inform the document end pharse. - node::Environment* env = node_bindings_->uv_env(); - if (env) { - v8::HandleScope handle_scope(env->isolate()); + v8::HandleScope handle_scope(v8::Isolate::GetCurrent()); + node::Environment* env = GetEnvironment(render_frame); + if (env) mate::EmitEvent(env->isolate(), env->process_object(), "document-end"); - } } void AtomRendererClient::DidCreateScriptContext( @@ -88,6 +86,8 @@ void AtomRendererClient::DidCreateScriptContext( if (!render_frame->IsMainFrame() && !IsDevToolsExtension(render_frame)) return; + injected_frames_.insert(render_frame); + // Prepare the node bindings. if (!node_integration_initialized_) { node_integration_initialized_ = true; @@ -102,6 +102,7 @@ void AtomRendererClient::DidCreateScriptContext( // Setup node environment for each window. node::Environment* env = node_bindings_->CreateEnvironment(context); + environments_.insert(env); // Add Electron extended APIs. atom_bindings_->BindTo(env->isolate(), env->process_object()); @@ -121,14 +122,14 @@ void AtomRendererClient::DidCreateScriptContext( void AtomRendererClient::WillReleaseScriptContext( v8::Handle context, content::RenderFrame* render_frame) { - // Only allow node integration for the main frame, unless it is a devtools - // extension page. - if (!render_frame->IsMainFrame() && !IsDevToolsExtension(render_frame)) - return; + injected_frames_.erase(render_frame); node::Environment* env = node::Environment::GetCurrent(context); - if (env) - mate::EmitEvent(env->isolate(), env->process_object(), "exit"); + if (environments_.find(env) == environments_.end()) + return; + environments_.erase(env); + + mate::EmitEvent(env->isolate(), env->process_object(), "exit"); // The main frame may be replaced. if (env == node_bindings_->uv_env()) @@ -209,5 +210,16 @@ void AtomRendererClient::SetupMainWorldOverrides( ignore_result(func->Call(context, v8::Null(isolate), 1, args)); } +node::Environment* AtomRendererClient::GetEnvironment( + content::RenderFrame* render_frame) const { + if (injected_frames_.find(render_frame) == injected_frames_.end()) + return nullptr; + v8::HandleScope handle_scope(v8::Isolate::GetCurrent()); + node::Environment* env = node::Environment::GetCurrent( + render_frame->GetWebFrame()->MainWorldScriptContext()); + if (environments_.find(env) == environments_.end()) + return nullptr; + return env; +} } // namespace atom diff --git a/atom/renderer/atom_renderer_client.h b/atom/renderer/atom_renderer_client.h index 0c411d2d35d..40e7205c3b5 100644 --- a/atom/renderer/atom_renderer_client.h +++ b/atom/renderer/atom_renderer_client.h @@ -5,11 +5,16 @@ #ifndef ATOM_RENDERER_ATOM_RENDERER_CLIENT_H_ #define ATOM_RENDERER_ATOM_RENDERER_CLIENT_H_ +#include #include #include #include "atom/renderer/renderer_client_base.h" +namespace node { +class Environment; +} + namespace atom { class AtomBindings; @@ -54,12 +59,24 @@ class AtomRendererClient : public RendererClientBase { void WillDestroyWorkerContextOnWorkerThread( v8::Local context) override; + node::Environment* GetEnvironment(content::RenderFrame* frame) const; + // Whether the node integration has been initialized. bool node_integration_initialized_; std::unique_ptr node_bindings_; std::unique_ptr atom_bindings_; + // The node::Environment::GetCurrent API does not return nullptr when it + // is called for a context without node::Environment, so we have to keep + // a book of the environments created. + std::set environments_; + + // Getting main script context from web frame would lazily initializes + // its script context. Doing so in a web page without scripts would trigger + // assertion, so we have to keep a book of injected web frames. + std::set injected_frames_; + DISALLOW_COPY_AND_ASSIGN(AtomRendererClient); }; From 714a793a0ed5d989d8dda5661eae902a477fd527 Mon Sep 17 00:00:00 2001 From: Aleksei Kuzmin Date: Thu, 15 Mar 2018 16:44:31 +0900 Subject: [PATCH 88/98] Update to the latest libcc with Ch63 --- vendor/libchromiumcontent | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/libchromiumcontent b/vendor/libchromiumcontent index a78780ff0c3..4acbced107f 160000 --- a/vendor/libchromiumcontent +++ b/vendor/libchromiumcontent @@ -1 +1 @@ -Subproject commit a78780ff0c3f69bf20ad4adc1c377a7f7218c7e0 +Subproject commit 4acbced107fbf6928bb4572c160f639683b35669 From 6aebae5a9801afaf567d8097964ba7321cc6da67 Mon Sep 17 00:00:00 2001 From: John Kleinschmidt Date: Thu, 15 Mar 2018 21:41:14 -0400 Subject: [PATCH 89/98] Remove custom appveyor config --- appveyor-test.yml | 81 ----------------------------------------------- 1 file changed, 81 deletions(-) delete mode 100644 appveyor-test.yml diff --git a/appveyor-test.yml b/appveyor-test.yml deleted file mode 100644 index dbfd30371ca..00000000000 --- a/appveyor-test.yml +++ /dev/null @@ -1,81 +0,0 @@ -version: 1.0.{build} -branches: - except: - - /^release$|^release-\d-\d-x$/ -build_cloud: libcc-20 -skip_branch_with_pr: true -image: libcc-20-vs2017 -environment: - DISABLE_CRASH_REPORTER_TESTS: true - APPVEYOR_RDP_PASSWORD: - secure: RCKgcu5XLpoU2i08YuN/btpiqqjS2/gN1ZZHfLW8F6o= - matrix: - - TARGET_ARCH: ia32 - - TARGET_ARCH: x64 -build_script: -- ps: >- - Add-Path "$env:ProgramFiles (x86)\Windows Kits\10\Debuggers\x64" - - $env:path = "$env:ProgramFiles (x86)\Windows Kits\10\Debuggers\x64;$env:path" - - $Message = (git log --format=%B -n 1 HEAD) | Out-String - - if ((Test-Path Env:\RUN_RELEASE_BUILD)) { - $env:ELECTRON_RELEASE = '1' - Write-Output "release build triggered from api" - } - - if ((Test-Path Env:\ELECTRON_RELEASE)) { - Write-Output "Running release build" - python script\bootstrap.py --target_arch=$env:TARGET_ARCH - python script\build.py -c R - python script\create-dist.py - } else { - Write-Output "Running debug build" - python script\bootstrap.py --target_arch=$env:TARGET_ARCH --dev - python script\build.py -c D - } - - if ($? -ne 'True') { - throw "Build failed with exit code $?" - } else { - "Build succeeded." - } -test_script: -- ps: >- - if (Test-Path Env:\ELECTRON_RELEASE) { - Write-Output "Skipping tests for release build" - } else { - Write-Output "Running tests for debug build" - python script\test.py --ci - if ($LASTEXITCODE -ne '0') { - throw "Tests failed with exit code $LASTEXITCODE" - } else { - Write-Output "Tests succeeded." - } - python script\verify-ffmpeg.py - - if ($LASTEXITCODE -ne '0') { - throw "Verify ffmpeg failed with exit code $LASTEXITCODE" - } else { - "Verify ffmpeg succeeded." - } - } -artifacts: -- path: test-results.xml - name: test-results.xml -deploy_script: -- ps: >- - if (Test-Path Env:\ELECTRON_RELEASE) { - if (Test-Path Env:\RUN_RELEASE_BUILD) { - Write-Output "Uploading Electron release distribution to s3" - & python script\upload.py --upload_to_s3 - } else { - Write-Output "Uploading Electron release distribution to github releases" - & python script\upload.py - } - } else { - Write-Output "Skipping upload distribution because build is not for release" - } -on_finish: - - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) From c1908147a9dcd4d814aceed1dfd84ee067d1b85e Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Fri, 16 Mar 2018 11:05:51 +0900 Subject: [PATCH 90/98] Fix windows build --- atom/browser/atom_browser_client.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/atom/browser/atom_browser_client.cc b/atom/browser/atom_browser_client.cc index 07f74b49da6..5dbde2a0d4a 100644 --- a/atom/browser/atom_browser_client.cc +++ b/atom/browser/atom_browser_client.cc @@ -25,6 +25,7 @@ #include "atom/common/google_api_key.h" #include "atom/common/options_switches.h" #include "base/command_line.h" +#include "base/environment.h" #include "base/files/file_util.h" #include "base/stl_util.h" #include "base/strings/string_number_conversions.h" From 4b39d17e5fc98cdc885008a993cb7e0aba96f096 Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Thu, 15 Mar 2018 17:51:48 +0900 Subject: [PATCH 91/98] move pdf viewer behind feature flag --- atom/app/atom_content_client.cc | 11 ++- atom/browser/atom_browser_main_parts.cc | 7 +- .../atom_resource_dispatcher_host_delegate.cc | 16 +++- .../browser/atom_web_ui_controller_factory.cc | 6 ++ atom/browser/ui/webui/pdf_viewer_handler.cc | 4 + atom/browser/ui/webui/pdf_viewer_handler.h | 4 + atom/browser/ui/webui/pdf_viewer_ui.cc | 4 + atom/browser/ui/webui/pdf_viewer_ui.h | 4 + atom/common/atom_constants.cc | 2 + atom/common/atom_constants.h | 2 + atom/renderer/atom_renderer_client.cc | 1 - atom/renderer/renderer_client_base.cc | 9 +- .../chrome_renderer_pepper_host_factory.cc | 9 +- .../pdf/renderer/pepper_pdf_host.cc | 4 + .../components/pdf/renderer/pepper_pdf_host.h | 4 + electron.gyp | 19 +++- features.gypi | 2 + filenames.gypi | 18 ++-- script/lib/util.py | 8 +- script/test.py | 2 + spec/chromium-spec.js | 86 ++++++++++--------- 21 files changed, 159 insertions(+), 63 deletions(-) diff --git a/atom/app/atom_content_client.cc b/atom/app/atom_content_client.cc index 0cc22bec2c1..f366691b2a3 100644 --- a/atom/app/atom_content_client.cc +++ b/atom/app/atom_content_client.cc @@ -7,7 +7,6 @@ #include #include -#include "atom/common/atom_constants.h" #include "atom/common/atom_version.h" #include "atom/common/chrome_version.h" #include "atom/common/options_switches.h" @@ -20,7 +19,6 @@ #include "content/public/common/pepper_plugin_info.h" #include "content/public/common/user_agent.h" #include "media/media_features.h" -#include "pdf/pdf.h" #include "ppapi/shared_impl/ppapi_permissions.h" #include "third_party/widevine/cdm/stub/widevine_cdm_version.h" #include "ui/base/l10n/l10n_util.h" @@ -30,6 +28,11 @@ #include "chrome/common/widevine_cdm_constants.h" #endif +#if defined(ENABLE_PDF_VIEWER) +#include "atom/common/atom_constants.h" +#include "pdf/pdf.h" +#endif // defined(ENABLE_PDF_VIEWER) + namespace atom { namespace { @@ -111,6 +114,7 @@ content::PepperPluginInfo CreateWidevineCdmInfo(const base::FilePath& path, } #endif // defined(WIDEVINE_CDM_AVAILABLE) && BUILDFLAG(ENABLE_LIBRARY_CDMS) +#if defined(ENABLE_PDF_VIEWER) void ComputeBuiltInPlugins(std::vector* plugins) { content::PepperPluginInfo pdf_info; pdf_info.is_internal = true; @@ -129,6 +133,7 @@ void ComputeBuiltInPlugins(std::vector* plugins) { pdf_info.permissions = ppapi::PERMISSION_PRIVATE | ppapi::PERMISSION_DEV; plugins->push_back(pdf_info); } +#endif // defined(ENABLE_PDF_VIEWER) void ConvertStringWithSeparatorToVector(std::vector* vec, const char* separator, @@ -220,7 +225,9 @@ void AtomContentClient::AddPepperPlugins( #if defined(WIDEVINE_CDM_AVAILABLE) && BUILDFLAG(ENABLE_LIBRARY_CDMS) AddWidevineCdmFromCommandLine(plugins); #endif // defined(WIDEVINE_CDM_AVAILABLE) && BUILDFLAG(ENABLE_LIBRARY_CDMS) +#if defined(ENABLE_PDF_VIEWER) ComputeBuiltInPlugins(plugins); +#endif // defined(ENABLE_PDF_VIEWER) } } // namespace atom diff --git a/atom/browser/atom_browser_main_parts.cc b/atom/browser/atom_browser_main_parts.cc index e8659bae158..df4ae834db0 100644 --- a/atom/browser/atom_browser_main_parts.cc +++ b/atom/browser/atom_browser_main_parts.cc @@ -9,7 +9,6 @@ #include "atom/browser/atom_access_token_store.h" #include "atom/browser/atom_browser_client.h" #include "atom/browser/atom_browser_context.h" -#include "atom/browser/atom_web_ui_controller_factory.h" #include "atom/browser/bridge_task_runner.h" #include "atom/browser/browser.h" #include "atom/browser/javascript_environment.h" @@ -33,6 +32,10 @@ #include "ui/events/devices/x11/touch_factory_x11.h" #endif +#if defined(ENABLE_PDF_VIEWER) +#include "atom/browser/atom_web_ui_controller_factory.h" +#endif // defined(ENABLE_PDF_VIEWER) + namespace atom { namespace { @@ -186,8 +189,10 @@ void AtomBrowserMainParts::PreMainMessageLoopRun() { base::Bind(&v8::Isolate::LowMemoryNotification, base::Unretained(js_env_->isolate()))); +#if defined(ENABLE_PDF_VIEWER) content::WebUIControllerFactory::RegisterFactory( AtomWebUIControllerFactory::GetInstance()); +#endif // defined(ENABLE_PDF_VIEWER) brightray::BrowserMainParts::PreMainMessageLoopRun(); bridge_task_runner_->MessageLoopIsReady(); diff --git a/atom/browser/atom_resource_dispatcher_host_delegate.cc b/atom/browser/atom_resource_dispatcher_host_delegate.cc index beca6c19354..d53adc9446e 100644 --- a/atom/browser/atom_resource_dispatcher_host_delegate.cc +++ b/atom/browser/atom_resource_dispatcher_host_delegate.cc @@ -8,17 +8,13 @@ #include "atom/browser/login_handler.h" #include "atom/browser/web_contents_permission_helper.h" #include "atom/browser/web_contents_preferences.h" -#include "atom/common/atom_constants.h" #include "atom/common/platform_util.h" -#include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/download_manager.h" #include "content/public/browser/render_frame_host.h" -#include "content/public/browser/stream_info.h" #include "net/base/escape.h" #include "net/ssl/client_cert_store.h" -#include "net/url_request/url_request.h" #include "url/gurl.h" #if defined(USE_NSS_CERTS) @@ -29,6 +25,14 @@ #include "net/ssl/client_cert_store_mac.h" #endif +#if defined(ENABLE_PDF_VIEWER) +#include "atom/common/atom_constants.h" +#include "base/strings/stringprintf.h" +#include "content/public/browser/stream_info.h" +#include "net/url_request/url_request.h" +#endif // defined(ENABLE_PDF_VIEWER) + + using content::BrowserThread; namespace atom { @@ -65,6 +69,7 @@ void HandleExternalProtocolInUI( url); } +#if defined(ENABLE_PDF_VIEWER) void OnPdfResourceIntercepted( const GURL& original_url, int render_process_host_id, @@ -102,6 +107,7 @@ void OnPdfResourceIntercepted( params.frame_tree_node_id = frame_host->GetFrameTreeNodeId(); web_contents->GetController().LoadURLWithParams(params); } +#endif // defined(ENABLE_PDF_VIEWER) } // namespace @@ -145,6 +151,7 @@ bool AtomResourceDispatcherHostDelegate::ShouldInterceptResourceAsStream( const std::string& mime_type, GURL* origin, std::string* payload) { +#if defined(ENABLE_PDF_VIEWER) const content::ResourceRequestInfo* info = content::ResourceRequestInfo::ForRequest(request); @@ -164,6 +171,7 @@ bool AtomResourceDispatcherHostDelegate::ShouldInterceptResourceAsStream( info->GetWebContentsGetterForRequest())); return true; } +#endif // defined(ENABLE_PDF_VIEWER) return false; } diff --git a/atom/browser/atom_web_ui_controller_factory.cc b/atom/browser/atom_web_ui_controller_factory.cc index 3262dc97409..dc7718f52ac 100644 --- a/atom/browser/atom_web_ui_controller_factory.cc +++ b/atom/browser/atom_web_ui_controller_factory.cc @@ -6,12 +6,14 @@ #include +#if defined(ENABLE_PDF_VIEWER) #include "atom/browser/ui/webui/pdf_viewer_ui.h" #include "atom/common/atom_constants.h" #include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "content/public/browser/web_contents.h" #include "net/base/escape.h" +#endif // defined(ENABLE_PDF_VIEWER) namespace atom { @@ -27,9 +29,11 @@ AtomWebUIControllerFactory::~AtomWebUIControllerFactory() {} content::WebUI::TypeID AtomWebUIControllerFactory::GetWebUIType( content::BrowserContext* browser_context, const GURL& url) const { +#if defined(ENABLE_PDF_VIEWER) if (url.host() == kPdfViewerUIHost) { return const_cast(this); } +#endif // defined(ENABLE_PDF_VIEWER) return content::WebUI::kNoWebUI; } @@ -49,6 +53,7 @@ bool AtomWebUIControllerFactory::UseWebUIBindingsForURL( content::WebUIController* AtomWebUIControllerFactory::CreateWebUIControllerForURL(content::WebUI* web_ui, const GURL& url) const { +#if defined(ENABLE_PDF_VIEWER) if (url.host() == kPdfViewerUIHost) { base::StringPairs toplevel_params; base::SplitStringIntoKeyValuePairs(url.query(), '=', '&', &toplevel_params); @@ -70,6 +75,7 @@ AtomWebUIControllerFactory::CreateWebUIControllerForURL(content::WebUI* web_ui, auto browser_context = web_ui->GetWebContents()->GetBrowserContext(); return new PdfViewerUI(browser_context, web_ui, src); } +#endif // defined(ENABLE_PDF_VIEWER) return nullptr; } diff --git a/atom/browser/ui/webui/pdf_viewer_handler.cc b/atom/browser/ui/webui/pdf_viewer_handler.cc index e4ba5be3bab..c8d92ddde15 100644 --- a/atom/browser/ui/webui/pdf_viewer_handler.cc +++ b/atom/browser/ui/webui/pdf_viewer_handler.cc @@ -2,6 +2,10 @@ // Use of this source code is governed by the MIT license that can be // found in the LICENSE file. +#ifndef ENABLE_PDF_VIEWER +#error("This header can only be used when enable_pdf_viewer gyp flag is enabled") +#endif // defined(ENABLE_PDF_VIEWER) + #include "atom/browser/ui/webui/pdf_viewer_handler.h" #include "atom/common/atom_constants.h" diff --git a/atom/browser/ui/webui/pdf_viewer_handler.h b/atom/browser/ui/webui/pdf_viewer_handler.h index 2da19e684cd..bd82b4cceec 100644 --- a/atom/browser/ui/webui/pdf_viewer_handler.h +++ b/atom/browser/ui/webui/pdf_viewer_handler.h @@ -2,6 +2,10 @@ // Use of this source code is governed by the MIT license that can be // found in the LICENSE file. +#ifndef ENABLE_PDF_VIEWER +#error("This header can only be used when enable_pdf_viewer gyp flag is enabled") +#endif // defined(ENABLE_PDF_VIEWER) + #ifndef ATOM_BROWSER_UI_WEBUI_PDF_VIEWER_HANDLER_H_ #define ATOM_BROWSER_UI_WEBUI_PDF_VIEWER_HANDLER_H_ diff --git a/atom/browser/ui/webui/pdf_viewer_ui.cc b/atom/browser/ui/webui/pdf_viewer_ui.cc index be154aeddfb..289ef6cce80 100644 --- a/atom/browser/ui/webui/pdf_viewer_ui.cc +++ b/atom/browser/ui/webui/pdf_viewer_ui.cc @@ -2,6 +2,10 @@ // Use of this source code is governed by the MIT license that can be // found in the LICENSE file. +#ifndef ENABLE_PDF_VIEWER +#error("This header can only be used when enable_pdf_viewer gyp flag is enabled") +#endif // defined(ENABLE_PDF_VIEWER) + #include "atom/browser/ui/webui/pdf_viewer_ui.h" #include diff --git a/atom/browser/ui/webui/pdf_viewer_ui.h b/atom/browser/ui/webui/pdf_viewer_ui.h index 2f514f5114b..02b4988ab6a 100644 --- a/atom/browser/ui/webui/pdf_viewer_ui.h +++ b/atom/browser/ui/webui/pdf_viewer_ui.h @@ -2,6 +2,10 @@ // Use of this source code is governed by the MIT license that can be // found in the LICENSE file. +#ifndef ENABLE_PDF_VIEWER +#error("This header can only be used when enable_pdf_viewer gyp flag is enabled") +#endif // defined(ENABLE_PDF_VIEWER) + #ifndef ATOM_BROWSER_UI_WEBUI_PDF_VIEWER_UI_H_ #define ATOM_BROWSER_UI_WEBUI_PDF_VIEWER_UI_H_ diff --git a/atom/common/atom_constants.cc b/atom/common/atom_constants.cc index 85307ded9e7..f5188983cc0 100644 --- a/atom/common/atom_constants.cc +++ b/atom/common/atom_constants.cc @@ -24,11 +24,13 @@ const char kSecureProtocolDescription[] = "The connection to this site is using a strong protocol version " "and cipher suite."; +#if defined(ENABLE_PDF_VIEWER) const char kPdfPluginMimeType[] = "application/x-google-chrome-pdf"; const char kPdfPluginPath[] = "chrome://pdf-viewer/"; const char kPdfPluginSrc[] = "src"; const char kPdfViewerUIOrigin[] = "chrome://pdf-viewer/"; const char kPdfViewerUIHost[] = "pdf-viewer"; +#endif // defined(ENABLE_PDF_VIEWER) } // namespace atom diff --git a/atom/common/atom_constants.h b/atom/common/atom_constants.h index f507214d9d8..7ad948f43f9 100644 --- a/atom/common/atom_constants.h +++ b/atom/common/atom_constants.h @@ -20,6 +20,7 @@ extern const char kValidCertificateDescription[]; extern const char kSecureProtocol[]; extern const char kSecureProtocolDescription[]; +#if defined(ENABLE_PDF_VIEWER) // The MIME type used for the PDF plugin. extern const char kPdfPluginMimeType[]; extern const char kPdfPluginPath[]; @@ -28,6 +29,7 @@ extern const char kPdfPluginSrc[]; // Constants for PDF viewer webui. extern const char kPdfViewerUIOrigin[]; extern const char kPdfViewerUIHost[]; +#endif // defined(ENABLE_PDF_VIEWER) } // namespace atom diff --git a/atom/renderer/atom_renderer_client.cc b/atom/renderer/atom_renderer_client.cc index 2ba4e9dc659..476bc5a4572 100644 --- a/atom/renderer/atom_renderer_client.cc +++ b/atom/renderer/atom_renderer_client.cc @@ -10,7 +10,6 @@ #include "atom/common/api/atom_bindings.h" #include "atom/common/api/event_emitter_caller.h" #include "atom/common/asar/asar_util.h" -#include "atom/common/atom_constants.h" #include "atom/common/node_bindings.h" #include "atom/common/options_switches.h" #include "atom/renderer/api/atom_api_renderer_ipc.h" diff --git a/atom/renderer/renderer_client_base.cc b/atom/renderer/renderer_client_base.cc index af9dfe39367..33a9336225d 100644 --- a/atom/renderer/renderer_client_base.cc +++ b/atom/renderer/renderer_client_base.cc @@ -7,7 +7,6 @@ #include #include -#include "atom/common/atom_constants.h" #include "atom/common/color_util.h" #include "atom/common/native_mate_converters/value_converter.h" #include "atom/common/options_switches.h" @@ -44,6 +43,10 @@ #include #endif +#if defined(ENABLE_PDF_VIEWER) +#include "atom/common/atom_constants.h" +#endif // defined(ENABLE_PDF_VIEWER) + namespace atom { namespace { @@ -153,9 +156,11 @@ void RendererClientBase::RenderFrameCreated( // This is required for widevine plugin detection provided during runtime. blink::ResetPluginCache(); +#if defined(ENABLE_PDF_VIEWER) // Allow access to file scheme from pdf viewer. blink::WebSecurityPolicy::AddOriginAccessWhitelistEntry( GURL(kPdfViewerUIOrigin), "file", "", true); +#endif // defined(ENABLE_PDF_VIEWER) } void RendererClientBase::RenderViewCreated(content::RenderView* render_view) { @@ -192,7 +197,9 @@ bool RendererClientBase::OverrideCreatePlugin( blink::WebPlugin** plugin) { base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); if (params.mime_type.Utf8() == content::kBrowserPluginMimeType || +#if defined(ENABLE_PDF_VIEWER) params.mime_type.Utf8() == kPdfPluginMimeType || +#endif // defined(ENABLE_PDF_VIEWER) command_line->HasSwitch(switches::kEnablePlugins)) return false; diff --git a/chromium_src/chrome/renderer/pepper/chrome_renderer_pepper_host_factory.cc b/chromium_src/chrome/renderer/pepper/chrome_renderer_pepper_host_factory.cc index f5829b9e599..c4046d92410 100644 --- a/chromium_src/chrome/renderer/pepper/chrome_renderer_pepper_host_factory.cc +++ b/chromium_src/chrome/renderer/pepper/chrome_renderer_pepper_host_factory.cc @@ -5,12 +5,10 @@ #include "chrome/renderer/pepper/chrome_renderer_pepper_host_factory.h" #include "base/logging.h" -#include "base/memory/ptr_util.h" #include "chrome/renderer/pepper/pepper_flash_font_file_host.h" #include "chrome/renderer/pepper/pepper_flash_fullscreen_host.h" #include "chrome/renderer/pepper/pepper_flash_menu_host.h" #include "chrome/renderer/pepper/pepper_flash_renderer_host.h" -#include "components/pdf/renderer/pepper_pdf_host.h" #include "content/public/renderer/renderer_ppapi_host.h" #include "ppapi/host/ppapi_host.h" #include "ppapi/host/resource_host.h" @@ -18,6 +16,11 @@ #include "ppapi/proxy/ppapi_messages.h" #include "ppapi/shared_impl/ppapi_permissions.h" +#if defined(ENABLE_PDF_VIEWER) +#include "base/memory/ptr_util.h" +#include "components/pdf/renderer/pepper_pdf_host.h" +#endif // defined(ENABLE_PDF_VIEWER) + using ppapi::host::ResourceHost; ChromeRendererPepperHostFactory::ChromeRendererPepperHostFactory( @@ -81,6 +84,7 @@ std::unique_ptr ChromeRendererPepperHostFactory::CreateResourceHos } } +#if defined(ENABLE_PDF_VIEWER) if (host_->GetPpapiHost()->permissions().HasPermission( ppapi::PERMISSION_PRIVATE)) { switch (message.type()) { @@ -89,6 +93,7 @@ std::unique_ptr ChromeRendererPepperHostFactory::CreateResourceHos } } } +#endif // defined(ENABLE_PDF_VIEWER) return std::unique_ptr(); } diff --git a/chromium_src/components/pdf/renderer/pepper_pdf_host.cc b/chromium_src/components/pdf/renderer/pepper_pdf_host.cc index 96385148c4f..f6cff468787 100644 --- a/chromium_src/components/pdf/renderer/pepper_pdf_host.cc +++ b/chromium_src/components/pdf/renderer/pepper_pdf_host.cc @@ -2,6 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifndef ENABLE_PDF_VIEWER +#error("This header can only be used when enable_pdf_viewer gyp flag is enabled") +#endif // defined(ENABLE_PDF_VIEWER) + #include "components/pdf/renderer/pepper_pdf_host.h" #include "atom/common/api/api_messages.h" diff --git a/chromium_src/components/pdf/renderer/pepper_pdf_host.h b/chromium_src/components/pdf/renderer/pepper_pdf_host.h index 1b0d35102dd..0f92ad40dbc 100644 --- a/chromium_src/components/pdf/renderer/pepper_pdf_host.h +++ b/chromium_src/components/pdf/renderer/pepper_pdf_host.h @@ -2,6 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifndef ENABLE_PDF_VIEWER +#error("This header can only be used when enable_pdf_viewer gyp flag is enabled") +#endif // defined(ENABLE_PDF_VIEWER) + #ifndef COMPONENTS_PDF_RENDERER_PEPPER_PDF_HOST_H_ #define COMPONENTS_PDF_RENDERER_PEPPER_PDF_HOST_H_ diff --git a/electron.gyp b/electron.gyp index 07acb13de7f..19bf70d89f4 100644 --- a/electron.gyp +++ b/electron.gyp @@ -28,7 +28,12 @@ 'ENABLE_OSR', ], }], # enable_osr==1 - ['enable_run_as_node', { + ['enable_pdf_viewer==1', { + 'defines': [ + 'ENABLE_PDF_VIEWER', + ], + }], # enable_pdf_viewer + ['enable_run_as_node==1', { 'defines': [ 'ENABLE_RUN_AS_NODE', ], @@ -243,7 +248,6 @@ 'type': 'static_library', 'dependencies': [ 'atom_js2c', - 'vendor/pdf_viewer/pdf_viewer.gyp:pdf_viewer', 'brightray/brightray.gyp:brightray', 'vendor/node/node.gyp:node_lib', ], @@ -313,6 +317,11 @@ 'brightray/brightray.gyp:brightray', ], 'conditions': [ + ['enable_pdf_viewer==1', { + 'dependencies': [ + 'vendor/pdf_viewer/pdf_viewer.gyp:pdf_viewer', + ], + }], # enable_pdf_viewer ['libchromiumcontent_component', { 'link_settings': { 'libraries': [ '<@(libchromiumcontent_v8_libraries)' ], @@ -614,7 +623,6 @@ '<(libchromiumcontent_dir)/icudtl.dat', '<(libchromiumcontent_dir)/natives_blob.bin', '<(libchromiumcontent_dir)/snapshot_blob.bin', - '<(PRODUCT_DIR)/pdf_viewer_resources.pak', ], 'xcode_settings': { 'ATOM_BUNDLE_ID': 'com.<(company_abbr).<(project_name).framework', @@ -682,6 +690,11 @@ }, ], 'conditions': [ + ['enable_pdf_viewer==1', { + 'mac_bundle_resources': [ + '<(PRODUCT_DIR)/pdf_viewer_resources.pak', + ], + }], # enable_pdf_viewer ['mas_build==0', { 'link_settings': { 'libraries': [ diff --git a/features.gypi b/features.gypi index 04bc4452b3c..66f47c6f2d4 100644 --- a/features.gypi +++ b/features.gypi @@ -3,9 +3,11 @@ 'variables': { 'variables': { 'enable_osr%': 0, # FIXME(alexeykuzmin) + 'enable_pdf_viewer%': 0, 'enable_run_as_node%': 1, }, 'enable_osr%': '<(enable_osr)', + 'enable_pdf_viewer%': '<(enable_pdf_viewer)', 'enable_run_as_node%': '<(enable_run_as_node)', }, } diff --git a/filenames.gypi b/filenames.gypi index ee1d5ec0545..d820ba48f10 100644 --- a/filenames.gypi +++ b/filenames.gypi @@ -354,10 +354,6 @@ 'atom/browser/ui/views/submenu_button.h', 'atom/browser/ui/views/win_frame_view.cc', 'atom/browser/ui/views/win_frame_view.h', - 'atom/browser/ui/webui/pdf_viewer_handler.cc', - 'atom/browser/ui/webui/pdf_viewer_handler.h', - 'atom/browser/ui/webui/pdf_viewer_ui.cc', - 'atom/browser/ui/webui/pdf_viewer_ui.h', 'atom/browser/ui/win/atom_desktop_native_widget_aura.cc', 'atom/browser/ui/win/atom_desktop_native_widget_aura.h', 'atom/browser/ui/win/atom_desktop_window_tree_host_win.cc', @@ -644,8 +640,6 @@ 'chromium_src/chrome/renderer/tts_dispatcher.cc', 'chromium_src/chrome/renderer/tts_dispatcher.h', 'chromium_src/chrome/utility/utility_message_handler.h', - 'chromium_src/components/pdf/renderer/pepper_pdf_host.cc', - 'chromium_src/components/pdf/renderer/pepper_pdf_host.h', 'chromium_src/extensions/browser/app_window/size_constraints.cc', 'chromium_src/extensions/browser/app_window/size_constraints.h', 'chromium_src/extensions/common/url_pattern.cc', @@ -731,7 +725,17 @@ 'atom/browser/osr/osr_view_proxy.h', ], }], # enable_osr==1 - ['enable_run_as_node', { + ['enable_pdf_viewer==1', { + 'lib_sources': [ + 'atom/browser/ui/webui/pdf_viewer_handler.cc', + 'atom/browser/ui/webui/pdf_viewer_handler.h', + 'atom/browser/ui/webui/pdf_viewer_ui.cc', + 'atom/browser/ui/webui/pdf_viewer_ui.h', + 'chromium_src/components/pdf/renderer/pepper_pdf_host.cc', + 'chromium_src/components/pdf/renderer/pepper_pdf_host.h', + ], + }], # enable_pdf_viewer + ['enable_run_as_node==1', { 'lib_sources': [ 'atom/app/node_main.cc', 'atom/app/node_main.h', diff --git a/script/lib/util.py b/script/lib/util.py index 26d24a80a6c..160afae3c5b 100644 --- a/script/lib/util.py +++ b/script/lib/util.py @@ -189,9 +189,13 @@ def execute_stdout(argv, env=os.environ, cwd=None): def electron_gyp(): SOURCE_ROOT = os.path.abspath(os.path.join(__file__, '..', '..', '..')) gyp = os.path.join(SOURCE_ROOT, 'electron.gyp') + features_gyp = os.path.join(SOURCE_ROOT, 'features.gypi') + obj = {} with open(gyp) as f: - obj = eval(f.read()); - return obj['variables'] + obj = eval(f.read())['variables'] + with open(features_gyp) as g: + obj.update(eval(g.read())['variables']['variables']) + return obj def get_electron_version(): diff --git a/script/test.py b/script/test.py index cb17102557d..5bccc955ffa 100755 --- a/script/test.py +++ b/script/test.py @@ -28,6 +28,7 @@ SOURCE_ROOT = os.path.abspath(os.path.dirname(os.path.dirname(__file__))) PROJECT_NAME = electron_gyp()['project_name%'] PRODUCT_NAME = electron_gyp()['product_name%'] +PDF_VIEWER_ENABLED = electron_gyp()['enable_pdf_viewer%'] def main(): @@ -35,6 +36,7 @@ def main(): args = parse_args() config = args.configuration + os.environ['PDF_VIEWER_ENABLED'] = str(PDF_VIEWER_ENABLED) if args.verbose: enable_verbose_mode() diff --git a/spec/chromium-spec.js b/spec/chromium-spec.js index 1f5b8c99fa7..9e5a3f6c952 100644 --- a/spec/chromium-spec.js +++ b/spec/chromium-spec.js @@ -1018,52 +1018,58 @@ describe('chromium feature', () => { }) describe('PDF Viewer', () => { - const pdfSource = url.format({ - pathname: path.join(fixtures, 'assets', 'cat.pdf').replace(/\\/g, '/'), - protocol: 'file', - slashes: true - }) - const pdfSourceWithParams = url.format({ - pathname: path.join(fixtures, 'assets', 'cat.pdf').replace(/\\/g, '/'), - query: { - a: 1, - b: 2 - }, - protocol: 'file', - slashes: true - }) + before(function () { + if (!parseInt(process.env.PDF_VIEWER_ENABLED)) { + return this.skip() + } - function createBrowserWindow ({plugins, preload}) { - w = new BrowserWindow({ - show: false, - webPreferences: { - preload: path.join(fixtures, 'module', preload), - plugins: plugins - } + const pdfSource = url.format({ + pathname: path.join(fixtures, 'assets', 'cat.pdf').replace(/\\/g, '/'), + protocol: 'file', + slashes: true }) - } - - function testPDFIsLoadedInSubFrame (page, preloadFile, done) { - const pagePath = url.format({ - pathname: path.join(fixtures, 'pages', page).replace(/\\/g, '/'), + const pdfSourceWithParams = url.format({ + pathname: path.join(fixtures, 'assets', 'cat.pdf').replace(/\\/g, '/'), + query: { + a: 1, + b: 2 + }, protocol: 'file', slashes: true }) - createBrowserWindow({plugins: true, preload: preloadFile}) - ipcMain.once('pdf-loaded', (event, state) => { - assert.equal(state, 'success') - done() - }) - w.webContents.on('page-title-updated', () => { - const parsedURL = url.parse(w.webContents.getURL(), true) - assert.equal(parsedURL.protocol, 'chrome:') - assert.equal(parsedURL.hostname, 'pdf-viewer') - assert.equal(parsedURL.query.src, pagePath) - assert.equal(w.webContents.getTitle(), 'cat.pdf') - }) - w.webContents.loadURL(pagePath) - } + function createBrowserWindow ({plugins, preload}) { + w = new BrowserWindow({ + show: false, + webPreferences: { + preload: path.join(fixtures, 'module', preload), + plugins: plugins + } + }) + } + + function testPDFIsLoadedInSubFrame (page, preloadFile, done) { + const pagePath = url.format({ + pathname: path.join(fixtures, 'pages', page).replace(/\\/g, '/'), + protocol: 'file', + slashes: true + }) + + createBrowserWindow({plugins: true, preload: preloadFile}) + ipcMain.once('pdf-loaded', (event, state) => { + assert.equal(state, 'success') + done() + }) + w.webContents.on('page-title-updated', () => { + const parsedURL = url.parse(w.webContents.getURL(), true) + assert.equal(parsedURL.protocol, 'chrome:') + assert.equal(parsedURL.hostname, 'pdf-viewer') + assert.equal(parsedURL.query.src, pagePath) + assert.equal(w.webContents.getTitle(), 'cat.pdf') + }) + w.webContents.loadURL(pagePath) + } + }) it('opens when loading a pdf resource as top level navigation', (done) => { createBrowserWindow({plugins: true, preload: 'preload-pdf-loaded.js'}) From e24c0dda5d6e2bf91ad7d9bd9a69318c7e072a02 Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Thu, 15 Mar 2018 22:56:25 +0900 Subject: [PATCH 92/98] add features module to detect availability of build time features at runtime --- atom/browser/ui/webui/pdf_viewer_handler.cc | 4 --- atom/browser/ui/webui/pdf_viewer_handler.h | 8 ++--- atom/browser/ui/webui/pdf_viewer_ui.cc | 4 --- atom/browser/ui/webui/pdf_viewer_ui.h | 8 ++--- atom/common/api/features.cc | 28 +++++++++++++++ atom/common/node_bindings.cc | 1 + features.gypi | 2 +- filenames.gypi | 1 + script/lib/util.py | 8 ++--- script/test.py | 2 -- spec/chromium-spec.js | 40 +++++++++++---------- 11 files changed, 62 insertions(+), 44 deletions(-) create mode 100644 atom/common/api/features.cc diff --git a/atom/browser/ui/webui/pdf_viewer_handler.cc b/atom/browser/ui/webui/pdf_viewer_handler.cc index c8d92ddde15..e4ba5be3bab 100644 --- a/atom/browser/ui/webui/pdf_viewer_handler.cc +++ b/atom/browser/ui/webui/pdf_viewer_handler.cc @@ -2,10 +2,6 @@ // Use of this source code is governed by the MIT license that can be // found in the LICENSE file. -#ifndef ENABLE_PDF_VIEWER -#error("This header can only be used when enable_pdf_viewer gyp flag is enabled") -#endif // defined(ENABLE_PDF_VIEWER) - #include "atom/browser/ui/webui/pdf_viewer_handler.h" #include "atom/common/atom_constants.h" diff --git a/atom/browser/ui/webui/pdf_viewer_handler.h b/atom/browser/ui/webui/pdf_viewer_handler.h index bd82b4cceec..73d2983a74b 100644 --- a/atom/browser/ui/webui/pdf_viewer_handler.h +++ b/atom/browser/ui/webui/pdf_viewer_handler.h @@ -2,13 +2,13 @@ // Use of this source code is governed by the MIT license that can be // found in the LICENSE file. -#ifndef ENABLE_PDF_VIEWER -#error("This header can only be used when enable_pdf_viewer gyp flag is enabled") -#endif // defined(ENABLE_PDF_VIEWER) - #ifndef ATOM_BROWSER_UI_WEBUI_PDF_VIEWER_HANDLER_H_ #define ATOM_BROWSER_UI_WEBUI_PDF_VIEWER_HANDLER_H_ +#ifndef ENABLE_PDF_VIEWER +#error("This header can only be used when enable_pdf_viewer gyp flag is enabled") // NOLINT +#endif // defined(ENABLE_PDF_VIEWER) + #include #include "atom/browser/web_contents_zoom_controller.h" diff --git a/atom/browser/ui/webui/pdf_viewer_ui.cc b/atom/browser/ui/webui/pdf_viewer_ui.cc index 289ef6cce80..be154aeddfb 100644 --- a/atom/browser/ui/webui/pdf_viewer_ui.cc +++ b/atom/browser/ui/webui/pdf_viewer_ui.cc @@ -2,10 +2,6 @@ // Use of this source code is governed by the MIT license that can be // found in the LICENSE file. -#ifndef ENABLE_PDF_VIEWER -#error("This header can only be used when enable_pdf_viewer gyp flag is enabled") -#endif // defined(ENABLE_PDF_VIEWER) - #include "atom/browser/ui/webui/pdf_viewer_ui.h" #include diff --git a/atom/browser/ui/webui/pdf_viewer_ui.h b/atom/browser/ui/webui/pdf_viewer_ui.h index 02b4988ab6a..c4d2b544610 100644 --- a/atom/browser/ui/webui/pdf_viewer_ui.h +++ b/atom/browser/ui/webui/pdf_viewer_ui.h @@ -2,13 +2,13 @@ // Use of this source code is governed by the MIT license that can be // found in the LICENSE file. -#ifndef ENABLE_PDF_VIEWER -#error("This header can only be used when enable_pdf_viewer gyp flag is enabled") -#endif // defined(ENABLE_PDF_VIEWER) - #ifndef ATOM_BROWSER_UI_WEBUI_PDF_VIEWER_UI_H_ #define ATOM_BROWSER_UI_WEBUI_PDF_VIEWER_UI_H_ +#ifndef ENABLE_PDF_VIEWER +#error("This header can only be used when enable_pdf_viewer gyp flag is enabled") // NOLINT +#endif // defined(ENABLE_PDF_VIEWER) + #include #include "base/macros.h" diff --git a/atom/common/api/features.cc b/atom/common/api/features.cc new file mode 100644 index 00000000000..2771e33f3e6 --- /dev/null +++ b/atom/common/api/features.cc @@ -0,0 +1,28 @@ +// Copyright (c) 2018 GitHub, Inc. +// Use of this source code is governed by the MIT license that can be +// found in the LICENSE file. + +#include "atom/common/node_includes.h" +#include "native_mate/dictionary.h" + +namespace { + +bool IsPDFViewerEnabled() { +#if defined(ENABLE_PDF_VIEWER) + return true; +#else + return false; +#endif +} + +void Initialize(v8::Local exports, + v8::Local unused, + v8::Local context, + void* priv) { + mate::Dictionary dict(context->GetIsolate(), exports); + dict.SetMethod("isPDFViewerEnabled", &IsPDFViewerEnabled); +} + +} // namespace + +NODE_BUILTIN_MODULE_CONTEXT_AWARE(atom_common_features, Initialize) diff --git a/atom/common/node_bindings.cc b/atom/common/node_bindings.cc index 15c65185684..41750c9cb23 100644 --- a/atom/common/node_bindings.cc +++ b/atom/common/node_bindings.cc @@ -53,6 +53,7 @@ V(atom_common_asar) \ V(atom_common_clipboard) \ V(atom_common_crash_reporter) \ + V(atom_common_features) \ V(atom_common_native_image) \ V(atom_common_notification) \ V(atom_common_screen) \ diff --git a/features.gypi b/features.gypi index 66f47c6f2d4..4e5c2765734 100644 --- a/features.gypi +++ b/features.gypi @@ -3,7 +3,7 @@ 'variables': { 'variables': { 'enable_osr%': 0, # FIXME(alexeykuzmin) - 'enable_pdf_viewer%': 0, + 'enable_pdf_viewer%': 1, 'enable_run_as_node%': 1, }, 'enable_osr%': '<(enable_osr)', diff --git a/filenames.gypi b/filenames.gypi index d820ba48f10..b92e405dc86 100644 --- a/filenames.gypi +++ b/filenames.gypi @@ -407,6 +407,7 @@ 'atom/common/api/atom_bindings.h', 'atom/common/api/event_emitter_caller.cc', 'atom/common/api/event_emitter_caller.h', + 'atom/common/api/features.cc', 'atom/common/api/locker.cc', 'atom/common/api/locker.h', 'atom/common/api/object_life_monitor.cc', diff --git a/script/lib/util.py b/script/lib/util.py index 160afae3c5b..26d24a80a6c 100644 --- a/script/lib/util.py +++ b/script/lib/util.py @@ -189,13 +189,9 @@ def execute_stdout(argv, env=os.environ, cwd=None): def electron_gyp(): SOURCE_ROOT = os.path.abspath(os.path.join(__file__, '..', '..', '..')) gyp = os.path.join(SOURCE_ROOT, 'electron.gyp') - features_gyp = os.path.join(SOURCE_ROOT, 'features.gypi') - obj = {} with open(gyp) as f: - obj = eval(f.read())['variables'] - with open(features_gyp) as g: - obj.update(eval(g.read())['variables']['variables']) - return obj + obj = eval(f.read()); + return obj['variables'] def get_electron_version(): diff --git a/script/test.py b/script/test.py index 5bccc955ffa..cb17102557d 100755 --- a/script/test.py +++ b/script/test.py @@ -28,7 +28,6 @@ SOURCE_ROOT = os.path.abspath(os.path.dirname(os.path.dirname(__file__))) PROJECT_NAME = electron_gyp()['project_name%'] PRODUCT_NAME = electron_gyp()['product_name%'] -PDF_VIEWER_ENABLED = electron_gyp()['enable_pdf_viewer%'] def main(): @@ -36,7 +35,6 @@ def main(): args = parse_args() config = args.configuration - os.environ['PDF_VIEWER_ENABLED'] = str(PDF_VIEWER_ENABLED) if args.verbose: enable_verbose_mode() diff --git a/spec/chromium-spec.js b/spec/chromium-spec.js index 9e5a3f6c952..b1245099340 100644 --- a/spec/chromium-spec.js +++ b/spec/chromium-spec.js @@ -7,10 +7,9 @@ const url = require('url') const ChildProcess = require('child_process') const {ipcRenderer, remote} = require('electron') const {closeWindow} = require('./window-helpers') - const {app, BrowserWindow, ipcMain, protocol, session, webContents} = remote - const isCI = remote.getGlobal('isCi') +const features = process.atomBinding('features') /* Most of the APIs here don't use standard callbacks */ /* eslint-disable standard/no-callback-literal */ @@ -1019,16 +1018,19 @@ describe('chromium feature', () => { describe('PDF Viewer', () => { before(function () { - if (!parseInt(process.env.PDF_VIEWER_ENABLED)) { + if (!features.isPDFViewerEnabled()) { return this.skip() } + }) - const pdfSource = url.format({ + beforeEach(() => { + this.pdfSource = url.format({ pathname: path.join(fixtures, 'assets', 'cat.pdf').replace(/\\/g, '/'), protocol: 'file', slashes: true }) - const pdfSourceWithParams = url.format({ + + this.pdfSourceWithParams = url.format({ pathname: path.join(fixtures, 'assets', 'cat.pdf').replace(/\\/g, '/'), query: { a: 1, @@ -1038,7 +1040,7 @@ describe('chromium feature', () => { slashes: true }) - function createBrowserWindow ({plugins, preload}) { + this.createBrowserWindow = ({plugins, preload}) => { w = new BrowserWindow({ show: false, webPreferences: { @@ -1048,14 +1050,14 @@ describe('chromium feature', () => { }) } - function testPDFIsLoadedInSubFrame (page, preloadFile, done) { + this.testPDFIsLoadedInSubFrame = (page, preloadFile, done) => { const pagePath = url.format({ pathname: path.join(fixtures, 'pages', page).replace(/\\/g, '/'), protocol: 'file', slashes: true }) - createBrowserWindow({plugins: true, preload: preloadFile}) + this.createBrowserWindow({plugins: true, preload: preloadFile}) ipcMain.once('pdf-loaded', (event, state) => { assert.equal(state, 'success') done() @@ -1072,7 +1074,7 @@ describe('chromium feature', () => { }) it('opens when loading a pdf resource as top level navigation', (done) => { - createBrowserWindow({plugins: true, preload: 'preload-pdf-loaded.js'}) + this.createBrowserWindow({plugins: true, preload: 'preload-pdf-loaded.js'}) ipcMain.once('pdf-loaded', (event, state) => { assert.equal(state, 'success') done() @@ -1081,14 +1083,14 @@ describe('chromium feature', () => { const parsedURL = url.parse(w.webContents.getURL(), true) assert.equal(parsedURL.protocol, 'chrome:') assert.equal(parsedURL.hostname, 'pdf-viewer') - assert.equal(parsedURL.query.src, pdfSource) + assert.equal(parsedURL.query.src, this.pdfSource) assert.equal(w.webContents.getTitle(), 'cat.pdf') }) - w.webContents.loadURL(pdfSource) + w.webContents.loadURL(this.pdfSource) }) it('opens a pdf link given params, the query string should be escaped', (done) => { - createBrowserWindow({plugins: true, preload: 'preload-pdf-loaded.js'}) + this.createBrowserWindow({plugins: true, preload: 'preload-pdf-loaded.js'}) ipcMain.once('pdf-loaded', (event, state) => { assert.equal(state, 'success') done() @@ -1097,16 +1099,16 @@ describe('chromium feature', () => { const parsedURL = url.parse(w.webContents.getURL(), true) assert.equal(parsedURL.protocol, 'chrome:') assert.equal(parsedURL.hostname, 'pdf-viewer') - assert.equal(parsedURL.query.src, pdfSourceWithParams) + assert.equal(parsedURL.query.src, this.pdfSourceWithParams) assert.equal(parsedURL.query.b, undefined) assert(parsedURL.search.endsWith('%3Fa%3D1%26b%3D2')) assert.equal(w.webContents.getTitle(), 'cat.pdf') }) - w.webContents.loadURL(pdfSourceWithParams) + w.webContents.loadURL(this.pdfSourceWithParams) }) it('should download a pdf when plugins are disabled', (done) => { - createBrowserWindow({plugins: false, preload: 'preload-pdf-loaded.js'}) + this.createBrowserWindow({plugins: false, preload: 'preload-pdf-loaded.js'}) ipcRenderer.sendSync('set-download-option', false, false) ipcRenderer.once('download-done', (event, state, url, mimeType, receivedBytes, totalBytes, disposition, filename) => { assert.equal(state, 'completed') @@ -1115,11 +1117,11 @@ describe('chromium feature', () => { fs.unlinkSync(path.join(fixtures, 'mock.pdf')) done() }) - w.webContents.loadURL(pdfSource) + w.webContents.loadURL(this.pdfSource) }) it('should not open when pdf is requested as sub resource', (done) => { - fetch(pdfSource).then((res) => { + fetch(this.pdfSource).then((res) => { assert.equal(res.status, 200) assert.notEqual(document.title, 'cat.pdf') done() @@ -1127,11 +1129,11 @@ describe('chromium feature', () => { }) it('opens when loading a pdf resource in a iframe', (done) => { - testPDFIsLoadedInSubFrame('pdf-in-iframe.html', 'preload-pdf-loaded-in-subframe.js', done) + this.testPDFIsLoadedInSubFrame('pdf-in-iframe.html', 'preload-pdf-loaded-in-subframe.js', done) }) it('opens when loading a pdf resource in a nested iframe', (done) => { - testPDFIsLoadedInSubFrame('pdf-in-nested-iframe.html', 'preload-pdf-loaded-in-nested-subframe.js', done) + this.testPDFIsLoadedInSubFrame('pdf-in-nested-iframe.html', 'preload-pdf-loaded-in-nested-subframe.js', done) }) }) From f5e1ee010b9f9810ec9cc2da1abd70c161f30408 Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Thu, 15 Mar 2018 22:57:06 +0900 Subject: [PATCH 93/98] FIXME: disable pdf viewer feature --- brightray/common/main_delegate.cc | 2 ++ brightray/common/main_delegate_mac.mm | 2 ++ features.gypi | 2 +- filenames.gypi | 4 ++-- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/brightray/common/main_delegate.cc b/brightray/common/main_delegate.cc index fd449365521..10afe35ea95 100644 --- a/brightray/common/main_delegate.cc +++ b/brightray/common/main_delegate.cc @@ -62,9 +62,11 @@ void LoadResourceBundle(const std::string& locale) { bundle.AddDataPackFromPath( pak_dir.Append(FILE_PATH_LITERAL("content_shell.pak")), ui::GetSupportedScaleFactors()[0]); +#if defined(ENABLE_PDF_VIEWER) bundle.AddDataPackFromPath( pak_dir.Append(FILE_PATH_LITERAL("pdf_viewer_resources.pak")), ui::GetSupportedScaleFactors()[0]); +#endif // defined(ENABLE_PDF_VIEWER) bundle.AddDataPackFromPath(pak_dir.Append(FILE_PATH_LITERAL( "blink_image_resources_200_percent.pak")), ui::SCALE_FACTOR_200P); diff --git a/brightray/common/main_delegate_mac.mm b/brightray/common/main_delegate_mac.mm index 99c44987871..a44fc5bfd11 100644 --- a/brightray/common/main_delegate_mac.mm +++ b/brightray/common/main_delegate_mac.mm @@ -36,8 +36,10 @@ void LoadCommonResources() { ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); bundle.AddDataPackFromPath(GetResourcesPakFilePath(@"content_shell"), ui::GetSupportedScaleFactors()[0]); +#if defined(ENABLE_PDF_VIEWER) bundle.AddDataPackFromPath(GetResourcesPakFilePath(@"pdf_viewer_resources"), ui::GetSupportedScaleFactors()[0]); +#endif // defined(ENABLE_PDF_VIEWER) } void MainDelegate::OverrideFrameworkBundlePath() { diff --git a/features.gypi b/features.gypi index 4e5c2765734..405b37c8e23 100644 --- a/features.gypi +++ b/features.gypi @@ -3,7 +3,7 @@ 'variables': { 'variables': { 'enable_osr%': 0, # FIXME(alexeykuzmin) - 'enable_pdf_viewer%': 1, + 'enable_pdf_viewer%': 0, # FIXME(deepak1556) 'enable_run_as_node%': 1, }, 'enable_osr%': '<(enable_osr)', diff --git a/filenames.gypi b/filenames.gypi index b92e405dc86..bb6c40215c8 100644 --- a/filenames.gypi +++ b/filenames.gypi @@ -649,8 +649,6 @@ 'chromium_src/library_loaders/libspeechd.h', '<@(native_mate_files)', '<(SHARED_INTERMEDIATE_DIR)/atom_natives.h', - '<(SHARED_INTERMEDIATE_DIR)/grit/pdf_viewer_resources_map.cc', - '<(SHARED_INTERMEDIATE_DIR)/grit/pdf_viewer_resources_map.h', ], 'lib_sources_linux': [ 'chromium_src/chrome/browser/icon_loader_auralinux.cc', @@ -734,6 +732,8 @@ 'atom/browser/ui/webui/pdf_viewer_ui.h', 'chromium_src/components/pdf/renderer/pepper_pdf_host.cc', 'chromium_src/components/pdf/renderer/pepper_pdf_host.h', + '<(SHARED_INTERMEDIATE_DIR)/grit/pdf_viewer_resources_map.cc', + '<(SHARED_INTERMEDIATE_DIR)/grit/pdf_viewer_resources_map.h', ], }], # enable_pdf_viewer ['enable_run_as_node==1', { From d4969783d73df1bfd2662125785b9bec3829e6fd Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Fri, 16 Mar 2018 16:28:06 +0900 Subject: [PATCH 94/98] Avoid including web_contents_impl.h This can fix the build error caused by duplicate typedefs. --- atom/browser/api/atom_api_web_contents.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/atom/browser/api/atom_api_web_contents.cc b/atom/browser/api/atom_api_web_contents.cc index c48f66ddc2a..c4ed63ba31a 100644 --- a/atom/browser/api/atom_api_web_contents.cc +++ b/atom/browser/api/atom_api_web_contents.cc @@ -55,7 +55,6 @@ #include "chrome/browser/ssl/security_state_tab_helper.h" #include "content/browser/renderer_host/render_widget_host_impl.h" #include "content/browser/renderer_host/render_widget_host_view_base.h" -#include "content/browser/web_contents/web_contents_impl.h" #include "content/common/view_messages.h" #include "content/public/browser/child_process_security_policy.h" #include "content/public/browser/favicon_status.h" @@ -65,6 +64,8 @@ #include "content/public/browser/navigation_handle.h" #include "content/public/browser/plugin_service.h" #include "content/public/browser/render_frame_host.h" +#include "content/public/browser/render_process_host.h" +#include "content/public/browser/render_view_host.h" #include "content/public/browser/render_widget_host.h" #include "content/public/browser/render_widget_host_view.h" #include "content/public/browser/resource_request_details.h" From 0ad8815bbc245e4eae1f9a727443890965da2310 Mon Sep 17 00:00:00 2001 From: Gellert Hegyi Date: Sat, 17 Mar 2018 23:26:41 +0100 Subject: [PATCH 95/98] fixes offscreen rendering issues --- atom/browser/api/atom_api_web_contents.cc | 16 +++++++++++----- atom/browser/osr/osr_render_widget_host_view.cc | 13 +++++++++++-- atom/browser/osr/osr_render_widget_host_view.h | 9 +++++++++ .../osr/osr_render_widget_host_view_mac.mm | 9 ++++++++- features.gypi | 2 +- 5 files changed, 40 insertions(+), 9 deletions(-) diff --git a/atom/browser/api/atom_api_web_contents.cc b/atom/browser/api/atom_api_web_contents.cc index c4ed63ba31a..41457424345 100644 --- a/atom/browser/api/atom_api_web_contents.cc +++ b/atom/browser/api/atom_api_web_contents.cc @@ -55,6 +55,7 @@ #include "chrome/browser/ssl/security_state_tab_helper.h" #include "content/browser/renderer_host/render_widget_host_impl.h" #include "content/browser/renderer_host/render_widget_host_view_base.h" +#include "content/browser/web_contents/web_contents_impl.h" #include "content/common/view_messages.h" #include "content/public/browser/child_process_security_policy.h" #include "content/public/browser/favicon_status.h" @@ -1726,7 +1727,8 @@ void WebContents::StartPainting() { return; #if defined(ENABLE_OSR) - const auto* wc_impl = static_cast(web_contents()); + const auto* wc_impl = + reinterpret_cast(web_contents()); auto* osr_wcv = static_cast(wc_impl->GetView()); if (osr_wcv) osr_wcv->SetPainting(true); @@ -1738,7 +1740,8 @@ void WebContents::StopPainting() { return; #if defined(ENABLE_OSR) - const auto* wc_impl = static_cast(web_contents()); + const auto* wc_impl = + reinterpret_cast(web_contents()); auto* osr_wcv = static_cast(wc_impl->GetView()); if (osr_wcv) osr_wcv->SetPainting(false); @@ -1750,7 +1753,8 @@ bool WebContents::IsPainting() const { return false; #if defined(ENABLE_OSR) - const auto* wc_impl = static_cast(web_contents()); + const auto* wc_impl = + reinterpret_cast(web_contents()); auto* osr_wcv = static_cast(wc_impl->GetView()); return osr_wcv && osr_wcv->IsPainting(); @@ -1764,7 +1768,8 @@ void WebContents::SetFrameRate(int frame_rate) { return; #if defined(ENABLE_OSR) - const auto* wc_impl = static_cast(web_contents()); + const auto* wc_impl = + reinterpret_cast(web_contents()); auto* osr_wcv = static_cast(wc_impl->GetView()); if (osr_wcv) @@ -1777,7 +1782,8 @@ int WebContents::GetFrameRate() const { return 0; #if defined(ENABLE_OSR) - const auto* wc_impl = static_cast(web_contents()); + const auto* wc_impl = + reinterpret_cast(web_contents()); auto* osr_wcv = static_cast(wc_impl->GetView()); return osr_wcv ? osr_wcv->GetFrameRate() : 0; diff --git a/atom/browser/osr/osr_render_widget_host_view.cc b/atom/browser/osr/osr_render_widget_host_view.cc index 8a68b601d59..6fb1b69fb71 100644 --- a/atom/browser/osr/osr_render_widget_host_view.cc +++ b/atom/browser/osr/osr_render_widget_host_view.cc @@ -291,11 +291,14 @@ OffScreenRenderWidgetHostView::OffScreenRenderWidgetHostView( bool is_guest_view_hack = parent_host_view_ != nullptr; #if !defined(OS_MACOSX) delegated_frame_host_ = base::MakeUnique( - AllocateFrameSinkId(is_guest_view_hack), this); + AllocateFrameSinkId(is_guest_view_hack), this, + false /* enable_surface_synchronization */); root_layer_.reset(new ui::Layer(ui::LAYER_SOLID_COLOR)); #endif + local_surface_id_ = local_surface_id_allocator_.GenerateId(); + #if defined(OS_MACOSX) CreatePlatformWidget(is_guest_view_hack); #else @@ -721,7 +724,7 @@ void OffScreenRenderWidgetHostView::ImeCompositionRangeChanged( } gfx::Size OffScreenRenderWidgetHostView::GetPhysicalBackingSize() const { - return gfx::ConvertSizeToPixel(scale_factor_, GetRequestedRendererSize()); + return gfx::ScaleToCeiledSize(GetRequestedRendererSize(), scale_factor_); } gfx::Size OffScreenRenderWidgetHostView::GetRequestedRendererSize() const { @@ -788,6 +791,10 @@ OffScreenRenderWidgetHostView::DelegatedFrameHostCreateResizeLock() { return base::MakeUnique(this, desired_size); } +viz::LocalSurfaceId CefRenderWidgetHostViewOSR::GetLocalSurfaceId() const { + return local_surface_id_; +} + void OffScreenRenderWidgetHostView::OnBeginFrame() { } @@ -1262,6 +1269,8 @@ void OffScreenRenderWidgetHostView::ResizeRootLayer() { const gfx::Size& size_in_pixels = gfx::ConvertSizeToPixel(scale_factor_, size); + local_surface_id_ = local_surface_id_allocator_.GenerateId(); + GetRootLayer()->SetBounds(gfx::Rect(size)); GetCompositor()->SetScaleAndSize(scale_factor_, size_in_pixels); } diff --git a/atom/browser/osr/osr_render_widget_host_view.h b/atom/browser/osr/osr_render_widget_host_view.h index 0841b8266a8..df768cb5654 100644 --- a/atom/browser/osr/osr_render_widget_host_view.h +++ b/atom/browser/osr/osr_render_widget_host_view.h @@ -23,6 +23,7 @@ #include "components/viz/common/frame_sinks/begin_frame_args.h" #include "components/viz/common/frame_sinks/begin_frame_source.h" #include "components/viz/common/quads/compositor_frame.h" +#include "components/viz/common/surfaces/local_surface_id_allocator.h" #include "content/browser/frame_host/render_widget_host_view_guest.h" #include "content/browser/renderer_host/compositor_resize_lock.h" #include "content/browser/renderer_host/delegated_frame_host.h" @@ -179,6 +180,7 @@ class OffScreenRenderWidgetHostView bool DelegatedFrameCanCreateResizeLock() const override; std::unique_ptr DelegatedFrameHostCreateResizeLock() override; + viz::LocalSurfaceId GetLocalSurfaceId() const override; void OnBeginFrame() override; // CompositorResizeLockClient implementation. std::unique_ptr GetCompositorLock( @@ -274,6 +276,10 @@ class OffScreenRenderWidgetHostView child_host_view_ = child_view; } + viz::LocalSurfaceId local_surface_id() const { + return local_surface_id_; + } + private: void SetupFrameRate(bool force); void ResizeRootLayer(); @@ -320,6 +326,9 @@ class OffScreenRenderWidgetHostView bool paint_callback_running_; + viz::LocalSurfaceId local_surface_id_; + viz::LocalSurfaceIdAllocator local_surface_id_allocator_; + std::unique_ptr root_layer_; std::unique_ptr compositor_; std::unique_ptr delegated_frame_host_; diff --git a/atom/browser/osr/osr_render_widget_host_view_mac.mm b/atom/browser/osr/osr_render_widget_host_view_mac.mm index 9d7ef29a2a8..7cbcc1f9e3c 100644 --- a/atom/browser/osr/osr_render_widget_host_view_mac.mm +++ b/atom/browser/osr/osr_render_widget_host_view_mac.mm @@ -16,7 +16,10 @@ class MacHelper : public content::BrowserCompositorMacClient, public ui::AcceleratedWidgetMacNSView { public: - explicit MacHelper(OffScreenRenderWidgetHostView* view) : view_(view) {} + explicit MacHelper(OffScreenRenderWidgetHostView* view) : view_(view) { + [this->AcceleratedWidgetGetNSView() setWantsLayer:YES]; + } + virtual ~MacHelper() {} // content::BrowserCompositorMacClient: @@ -40,6 +43,10 @@ class MacHelper : void BrowserCompositorMacOnBeginFrame() override {} + viz::LocalSurfaceId GetLocalSurfaceId() const override { + return view_->local_surface_id(); + } + // ui::AcceleratedWidgetMacNSView: NSView* AcceleratedWidgetGetNSView() const override { return [view_->window()->GetNativeWindow() contentView]; diff --git a/features.gypi b/features.gypi index 405b37c8e23..247d828bbc0 100644 --- a/features.gypi +++ b/features.gypi @@ -2,7 +2,7 @@ # If it looks stupid but it works it ain't stupid. 'variables': { 'variables': { - 'enable_osr%': 0, # FIXME(alexeykuzmin) + 'enable_osr%': 1, # FIXME(alexeykuzmin) 'enable_pdf_viewer%': 0, # FIXME(deepak1556) 'enable_run_as_node%': 1, }, From a9cdd6614ae4214bce35d7d19325b7010eea0ec0 Mon Sep 17 00:00:00 2001 From: Gellert Hegyi Date: Sat, 17 Mar 2018 23:41:45 +0100 Subject: [PATCH 96/98] fixes class name --- atom/browser/osr/osr_render_widget_host_view.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atom/browser/osr/osr_render_widget_host_view.cc b/atom/browser/osr/osr_render_widget_host_view.cc index 6fb1b69fb71..e7c7d82bf3c 100644 --- a/atom/browser/osr/osr_render_widget_host_view.cc +++ b/atom/browser/osr/osr_render_widget_host_view.cc @@ -791,7 +791,7 @@ OffScreenRenderWidgetHostView::DelegatedFrameHostCreateResizeLock() { return base::MakeUnique(this, desired_size); } -viz::LocalSurfaceId CefRenderWidgetHostViewOSR::GetLocalSurfaceId() const { +viz::LocalSurfaceId OffScreenRenderWidgetHostView::GetLocalSurfaceId() const { return local_surface_id_; } From 2e94a730cc0da7578768475ab2538c7e797e33d8 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Tue, 20 Mar 2018 10:25:51 +0900 Subject: [PATCH 97/98] Isolate the code using content::WebContentsImpl --- atom/browser/api/atom_api_web_contents.cc | 24 ++++------------- atom/browser/api/atom_api_web_contents.h | 8 ++++++ atom/browser/api/atom_api_web_contents_osr.cc | 26 +++++++++++++++++++ filenames.gypi | 1 + 4 files changed, 40 insertions(+), 19 deletions(-) create mode 100644 atom/browser/api/atom_api_web_contents_osr.cc diff --git a/atom/browser/api/atom_api_web_contents.cc b/atom/browser/api/atom_api_web_contents.cc index 41457424345..695ac4346cd 100644 --- a/atom/browser/api/atom_api_web_contents.cc +++ b/atom/browser/api/atom_api_web_contents.cc @@ -55,7 +55,6 @@ #include "chrome/browser/ssl/security_state_tab_helper.h" #include "content/browser/renderer_host/render_widget_host_impl.h" #include "content/browser/renderer_host/render_widget_host_view_base.h" -#include "content/browser/web_contents/web_contents_impl.h" #include "content/common/view_messages.h" #include "content/public/browser/child_process_security_policy.h" #include "content/public/browser/favicon_status.h" @@ -1727,9 +1726,7 @@ void WebContents::StartPainting() { return; #if defined(ENABLE_OSR) - const auto* wc_impl = - reinterpret_cast(web_contents()); - auto* osr_wcv = static_cast(wc_impl->GetView()); + auto* osr_wcv = GetOffScreenWebContentsView(); if (osr_wcv) osr_wcv->SetPainting(true); #endif @@ -1740,9 +1737,7 @@ void WebContents::StopPainting() { return; #if defined(ENABLE_OSR) - const auto* wc_impl = - reinterpret_cast(web_contents()); - auto* osr_wcv = static_cast(wc_impl->GetView()); + auto* osr_wcv = GetOffScreenWebContentsView(); if (osr_wcv) osr_wcv->SetPainting(false); #endif @@ -1753,10 +1748,7 @@ bool WebContents::IsPainting() const { return false; #if defined(ENABLE_OSR) - const auto* wc_impl = - reinterpret_cast(web_contents()); - auto* osr_wcv = static_cast(wc_impl->GetView()); - + auto* osr_wcv = GetOffScreenWebContentsView(); return osr_wcv && osr_wcv->IsPainting(); #else return false; @@ -1768,10 +1760,7 @@ void WebContents::SetFrameRate(int frame_rate) { return; #if defined(ENABLE_OSR) - const auto* wc_impl = - reinterpret_cast(web_contents()); - auto* osr_wcv = static_cast(wc_impl->GetView()); - + auto* osr_wcv = GetOffScreenWebContentsView(); if (osr_wcv) osr_wcv->SetFrameRate(frame_rate); #endif @@ -1782,10 +1771,7 @@ int WebContents::GetFrameRate() const { return 0; #if defined(ENABLE_OSR) - const auto* wc_impl = - reinterpret_cast(web_contents()); - auto* osr_wcv = static_cast(wc_impl->GetView()); - + auto* osr_wcv = GetOffScreenWebContentsView(); return osr_wcv ? osr_wcv->GetFrameRate() : 0; #else return 0; diff --git a/atom/browser/api/atom_api_web_contents.h b/atom/browser/api/atom_api_web_contents.h index 00e4b5a84a1..ceb0c75e7d8 100644 --- a/atom/browser/api/atom_api_web_contents.h +++ b/atom/browser/api/atom_api_web_contents.h @@ -48,6 +48,10 @@ class AtomJavaScriptDialogManager; class WebContentsZoomController; class WebViewGuestDelegate; +#if defined(ENABLE_OSR) +class OffScreenWebContentsView; +#endif + namespace api { // Certain events are only in WebContentsDelegate, provide our own Observer to @@ -393,6 +397,10 @@ class WebContents : public mate::TrackableObject, return ++request_id_; } +#if defined(ENABLE_OSR) + OffScreenWebContentsView* GetOffScreenWebContentsView() const; +#endif + // Called when we receive a CursorChange message from chromium. void OnCursorChange(const content::WebCursor& cursor); diff --git a/atom/browser/api/atom_api_web_contents_osr.cc b/atom/browser/api/atom_api_web_contents_osr.cc new file mode 100644 index 00000000000..be999c283f1 --- /dev/null +++ b/atom/browser/api/atom_api_web_contents_osr.cc @@ -0,0 +1,26 @@ +// Copyright (c) 2018 GitHub, Inc. +// Use of this source code is governed by the MIT license that can be +// found in the LICENSE file. + +#include "atom/browser/api/atom_api_web_contents.h" + +#include "atom/browser/osr/osr_web_contents_view.h" +#include "content/browser/web_contents/web_contents_impl.h" + +// Including both web_contents_impl.h and node.h would introduce a error, we +// have to isolate the usage of WebContentsImpl into a clean file to fix it: +// error C2371: 'ssize_t': redefinition; different basic types + +namespace atom { + +namespace api { + +OffScreenWebContentsView* WebContents::GetOffScreenWebContentsView() const { + const auto* impl = + static_cast(web_contents()); + return static_cast(impl->GetView()); +} + +} // namespace api + +} // namespace atom diff --git a/filenames.gypi b/filenames.gypi index bb6c40215c8..025469c73e8 100644 --- a/filenames.gypi +++ b/filenames.gypi @@ -712,6 +712,7 @@ }], # OS=="win" ['enable_osr==1', { 'lib_sources': [ + 'atom/browser/api/atom_api_web_contents_osr.cc', 'atom/browser/osr/osr_web_contents_view_mac.mm', 'atom/browser/osr/osr_web_contents_view.cc', 'atom/browser/osr/osr_web_contents_view.h', From c70150847d115043703da76d37def49dddc8f0e1 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Tue, 20 Mar 2018 10:27:59 +0900 Subject: [PATCH 98/98] Ignore warning LNK4199 We are now sharing the /DELAYLOAD settings between configurations. --- brightray/brightray.gyp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/brightray/brightray.gyp b/brightray/brightray.gyp index 6a7520288f5..1a407ff54e7 100644 --- a/brightray/brightray.gyp +++ b/brightray/brightray.gyp @@ -280,6 +280,10 @@ 'link_settings': { 'msvs_settings': { 'VCLinkerTool': { + 'AdditionalOptions': [ + # warning /DELAYLOAD:dll ignored; no imports found from dll + '/ignore:4199', + ], 'AdditionalDependencies': [ 'delayimp.lib', ],