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 f0d7c2dc0d..9867ccf70b 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 292e53244b..e6110ffe92 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 d0ebc901bb..7e86ba50cd 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 7ed8b03211..7f998417c0 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 b7f000d6fd..660c1dcef6 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 daec9b12e8..0e70af7751 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 f20c32050e..e8189161c1 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 50b0c9799b..299d717375 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 7711211356..4a496ef3f9 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 cf7641c213..59d1e31c14 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 b8a844a688..437be4aec4 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 95afc70b58..046641df50 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 38740abd04..b15a160bd1 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 5cd7101491..00e4b5a84a 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 4a496ef3f9..87cc591736 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 b0ecbea4fe..c83c10a146 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 86d4e4bb22..b7b6b2abca 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 827154b0d0..8eef00756d 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 a6fe5e2654..ebbc65ec8d 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 1f0bdae4c0..b524bf7697 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 99e4e74cd7..9fdc4507b9 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 43dc5142ed..79aebcb139 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 ccc6ac9bed..1c07453c7d 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 96d10d2a9f..aa999e1d3c 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 419f93f382..5d13994134 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 6d9f8a2dab..f3c19ceac3 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 f3c19ceac3..a64086a127 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 a64086a127..469a8a7d92 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 1ee0d57e36..673576c6d6 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 c15d5389a2..d91891e55f 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 469a8a7d92..80c2633f32 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 4168be3536..4b22c81fe1 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 0f5e55403b..dffedd91e6 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 4b22c81fe1..7532da2795 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 bd69d8bc78..e3fdcd7ddc 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 86aa7c5506..b9c6b96571 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 79aebcb139..83a3833845 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 6d0348db25..449e8e8f28 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 437be4aec4..4ffaaab5b4 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 5cd7d93116..0a4d1a5fdb 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 bdde5f3a40..f0a6206f34 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 07dee3e6ce..cf04daa6f1 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 5d13994134..a0e3e3ff40 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 7d146bc34d..b6b144f908 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 ea08de23ae..60b8473f0f 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 aaa355a0ba..0e3605ea50 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 1c07453c7d..ed44cde8e6 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 bca518f6fc..28fc372ffd 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 e3dcbe063e..85ae2022b7 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 6950feb766..ff0a1f38fe 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 b15a160bd1..21b8024f29 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 0a4d1a5fdb..bc8b0f27bd 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 3c8d512b6b..82618e3696 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 96201b994c..ce63d6e441 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 a262e9b1ba..b2fb1113bb 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 6f8fbcd056..8af927adba 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 c6dc365df3..9959e20dae 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 9867ccf70b..6c174280e9 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 8af927adba..07acb13de7 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 21b8024f29..93c65e448f 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 00e4b5a84a..96bbd42650 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 f0eb075eba..8b95d53dcd 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 668f3cd06e..1d239b60fe 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 ed444dca75..1dec51c78d 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 f76b3b28e8..9ef6dc484a 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 328671f09d..3fe749c477 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 f8867fbae3..7173335daf 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 3fe749c477..ecefd03ba7 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 7173335daf..0841b8266a 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 ecefd03ba7..f8363664c3 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 f8363664c3..10075b2f9e 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 5aca98fc47..04bc4452b3 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 7c7189af1a..2f5109d00e 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 20f4957a3b..000cf56771 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 ed44cde8e6..68c6aefa33 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 85ae2022b7..a7ccf6796c 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 7e86ba50cd..e4e34bd1a5 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 63ceb3e8a0..1a224f7eb5 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 8b95d53dcd..4a201adaf0 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 93c65e448f..9f96ac0edf 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 cdccde2e5e..4a4d0638f0 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 cf90252289..47d1786bc2 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 b7b6b2abca..f55ecc4440 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 680459a14c..fe4424af5f 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 2a941711f6..bc3016d1d4 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 83a3833845..abf8f698f5 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 449e8e8f28..25386099dd 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 0e70af7751..079931fdb3 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 e8189161c1..ac779fe162 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 7405ed9426..0000000000 --- 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 f9885ba468..0000000000 --- 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 bd37e61d94..0000000000 --- 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 1ba5bf3086..0000000000 --- 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 8d167a1e51..0000000000 --- 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 cbb89ca25b..0000000000 --- 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 8fec4c45db..0000000000 --- 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 08f5f67216..0000000000 --- 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 caf738435f..0000000000 --- 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 8efa3468fe..0000000000 --- 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 1c18ad1712..0000000000 --- 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 d7317e47ac..0000000000 --- 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 98c7bb57e8..0000000000 --- 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 e303cc2436..0000000000 --- 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 73a3754187..0000000000 --- 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 1f2921b61d..0000000000 --- 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 80c2633f32..e1a1af6c4b 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 51b0ed5322..5310e1f48f 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 9ddd990cfa..c6c7d4e8e6 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 929b641d44..2fcffef4f9 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 561996f78f..1875fddc7e 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 750af7ef27..0546026abd 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 9f96ac0edf..68ed0ba754 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 e3fdcd7ddc..d54a393309 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 b9c6b96571..f7ddcc6141 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 e1a1af6c4b..e39758d737 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 4a201adaf0..ac7b5eeafb 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 68ed0ba754..5b6b16b435 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 96bbd42650..00e4b5a84a 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 673576c6d6..1ee0d57e36 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 d91891e55f..c15d5389a2 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 483f5639bf..dcb59bdb07 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 4ddf9186b7..07b634331a 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 1a425dfa1d..30bd8d004a 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 5b6b16b435..c48f66ddc2 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 24917cbef6..64322e562e 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 07b634331a..8fb04f7363 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 47d1786bc2..cf90252289 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 9313a9fa92..5c6e794321 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 f053aa4dba..56aa5f5d95 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 e4e34bd1a5..23bdd6adb7 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 1a224f7eb5..dc5760db70 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 0546026abd..2cca70d1ce 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 76ce95a876..b6317ca024 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 056bd36165..5b582e35d7 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 5b582e35d7..281529eb9b 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 49ddb877f1..78419745c2 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 87cc591736..c38f9e2372 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 0713fc2eb8..aefc517834 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 eb84b69f73..d1a50b1b79 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 dc5760db70..b0f9652deb 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 2f5109d00e..596b9bd373 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 b0f9652deb..532b831e98 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 b6317ca024..6243f0b3fc 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 7532da2795..d84c6af591 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 8fb04f7363..00c85bb3f1 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 d84c6af591..8e80e58a94 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 dffedd91e6..bbfd94479d 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 bc8b0f27bd..6b912469f8 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 6243f0b3fc..8fbd0d1bea 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 6c174280e9..bf3bb8d2a9 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 73df333dd2..f6c3f0ac12 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 1d239b60fe..4a790608d1 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 8d7d0c7eaf..0e94e2fde5 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 df759241fe..85c9ad2e14 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 492c9a411c..26d24a80a6 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 891cc4389d..5b4e201d76 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 ed736dabd0..efccaa408e 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 281529eb9b..5c6677b333 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 10075b2f9e..7bc7c69afe 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 7bc7c69afe..8a68b601d5 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 0000000000..76a61ddc37 --- /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 76a61ddc37..2fb4fb8788 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 2fb4fb8788..1ee6113e6c 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 1ee6113e6c..dbfd30371c 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 3f78c5c533..1f5b8c99fa 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 532b831e98..6a7520288f 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 bf3bb8d2a9..a78780ff0c 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 56aa5f5d95..f053aa4dba 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 4ffaaab5b4..705d1fbbc9 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 046641df50..8e085da58a 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 bf4e4ecdc8..0000000000 --- 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 820ceddce4..8440e16cee 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 e051b4707e..ee1d5ec054 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 4a790608d1..584e637084 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 23bdd6adb7..03d72ca70f 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 705d1fbbc9..07f74b49da 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 8e085da58a..ceacd354ab 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 f69682ce51..673d50228f 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 f20fb0bf9e..c96aa98065 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 c04f09fa8a..866008eb4e 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 5bcf7e0f71..2ba4e9dc65 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 0c411d2d35..40e7205c3b 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 a78780ff0c..4acbced107 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 dbfd30371c..0000000000 --- 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 07f74b49da..5dbde2a0d4 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 0cc22bec2c..f366691b2a 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 e8659bae15..df4ae834db 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 beca6c1935..d53adc9446 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 3262dc9740..dc7718f52a 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 e4ba5be3ba..c8d92ddde1 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 2da19e684c..bd82b4ccee 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 be154aeddf..289ef6cce8 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 2f514f5114..02b4988ab6 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 85307ded9e..f5188983cc 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 f507214d9d..7ad948f43f 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 2ba4e9dc65..476bc5a457 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 af9dfe3936..33a9336225 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 f5829b9e59..c4046d9241 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 96385148c4..f6cff46878 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 1b0d35102d..0f92ad40db 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 07acb13de7..19bf70d89f 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 04bc4452b3..66f47c6f2d 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 ee1d5ec054..d820ba48f1 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 26d24a80a6..160afae3c5 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 cb17102557..5bccc955ff 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 1f5b8c99fa..9e5a3f6c95 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 c8d92ddde1..e4ba5be3ba 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 bd82b4ccee..73d2983a74 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 289ef6cce8..be154aeddf 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 02b4988ab6..c4d2b54461 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 0000000000..2771e33f3e --- /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 15c6518568..41750c9cb2 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 66f47c6f2d..4e5c276573 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 d820ba48f1..b92e405dc8 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 160afae3c5..26d24a80a6 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 5bccc955ff..cb17102557 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 9e5a3f6c95..b124509934 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 fd44936552..10afe35ea9 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 99c4498787..a44fc5bfd1 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 4e5c276573..405b37c8e2 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 b92e405dc8..bb6c40215c 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 c48f66ddc2..c4ed63ba31 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 c4ed63ba31..4145742434 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 8a68b601d5..6fb1b69fb7 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 0841b8266a..df768cb565 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 9d7ef29a2a..7cbcc1f9e3 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 405b37c8e2..247d828bbc 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 6fb1b69fb7..e7c7d82bf3 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 4145742434..695ac4346c 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 00e4b5a84a..ceb0c75e7d 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 0000000000..be999c283f --- /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 bb6c40215c..025469c73e 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 6a7520288f..1a407ff54e 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', ],