diff --git a/filenames.gni b/filenames.gni index 404b2f3502e29..324e6caed6aef 100644 --- a/filenames.gni +++ b/filenames.gni @@ -110,6 +110,8 @@ filenames = { "shell/browser/api/electron_api_web_contents.h", "shell/browser/api/electron_api_web_contents_impl.cc", "shell/browser/api/electron_api_web_contents_mac.mm", + "shell/browser/api/electron_api_web_contents_linux.cc", + "shell/browser/api/electron_api_web_contents_win.cc", "shell/browser/api/electron_api_web_contents_view.cc", "shell/browser/api/electron_api_web_contents_view.h", "shell/browser/api/electron_api_web_request.cc", diff --git a/shell/browser/api/electron_api_web_contents.cc b/shell/browser/api/electron_api_web_contents.cc index b65096d368ad3..e61a7aa5a596b 100644 --- a/shell/browser/api/electron_api_web_contents.cc +++ b/shell/browser/api/electron_api_web_contents.cc @@ -100,6 +100,7 @@ #include "third_party/blink/public/mojom/frame/find_in_page.mojom.h" #include "third_party/blink/public/mojom/frame/fullscreen.mojom.h" #include "third_party/blink/public/mojom/messaging/transferable_message.mojom.h" +#include "third_party/blink/public/mojom/renderer_preferences.mojom.h" #include "ui/base/cursor/cursor.h" #include "ui/base/mojom/cursor_type.mojom-shared.h" #include "ui/display/screen.h" @@ -121,7 +122,6 @@ #endif #if defined(OS_LINUX) || defined(OS_WIN) -#include "third_party/blink/public/mojom/renderer_preferences.mojom.h" #include "ui/gfx/font_render_params.h" #endif @@ -535,7 +535,7 @@ void WebContents::InitWithSessionAndOptions( managed_web_contents()->GetView()->SetDelegate(this); auto* prefs = web_contents()->GetMutableRendererPrefs(); - prefs->accept_languages = g_browser_process->GetApplicationLocale(); + SetAcceptLanguages(prefs); #if defined(OS_LINUX) || defined(OS_WIN) // Update font settings. diff --git a/shell/browser/api/electron_api_web_contents.h b/shell/browser/api/electron_api_web_contents.h index 980ff85b0630f..2db27c7ffe1dd 100644 --- a/shell/browser/api/electron_api_web_contents.h +++ b/shell/browser/api/electron_api_web_contents.h @@ -579,6 +579,8 @@ class WebContents : public gin_helper::TrackableObject, void InitZoomController(content::WebContents* web_contents, const gin_helper::Dictionary& options); + void SetAcceptLanguages(blink::mojom::RendererPreferences* prefs); + v8::Global session_; v8::Global devtools_web_contents_; v8::Global debugger_; diff --git a/shell/browser/api/electron_api_web_contents_linux.cc b/shell/browser/api/electron_api_web_contents_linux.cc new file mode 100644 index 0000000000000..27ac73c9b4cd3 --- /dev/null +++ b/shell/browser/api/electron_api_web_contents_linux.cc @@ -0,0 +1,20 @@ +// Copyright (c) 2020 GitHub, Inc. +// Use of this source code is governed by the MIT license that can be +// found in the LICENSE file. + +#include "shell/browser/api/electron_api_web_contents.h" + +#include "chrome/browser/browser_process.h" +#include "content/public/common/renderer_preferences.h" + +namespace electron { + +namespace api { + +void WebContents::SetAcceptLanguages(blink::mojom::RendererPreferences* prefs) { + prefs->accept_languages = g_browser_process->GetApplicationLocale(); +} + +} // namespace api + +} // namespace electron diff --git a/shell/browser/api/electron_api_web_contents_mac.mm b/shell/browser/api/electron_api_web_contents_mac.mm index ea70eed08d522..3e0c920400004 100644 --- a/shell/browser/api/electron_api_web_contents_mac.mm +++ b/shell/browser/api/electron_api_web_contents_mac.mm @@ -4,6 +4,7 @@ #include "content/public/browser/render_widget_host_view.h" #include "shell/browser/api/electron_api_web_contents.h" +#include "third_party/blink/public/mojom/renderer_preferences.mojom.h" #import @@ -27,6 +28,11 @@ return view->HasFocus(); } +void WebContents::SetAcceptLanguages(blink::mojom::RendererPreferences* prefs) { + prefs->accept_languages = base::SysNSStringToUTF8( + [[NSLocale preferredLanguages] componentsJoinedByString:@","]); +} + } // namespace api } // namespace electron diff --git a/shell/browser/api/electron_api_web_contents_win.cc b/shell/browser/api/electron_api_web_contents_win.cc new file mode 100644 index 0000000000000..a4e21eca8f86c --- /dev/null +++ b/shell/browser/api/electron_api_web_contents_win.cc @@ -0,0 +1,28 @@ +// Copyright (c) 2020 GitHub, Inc. +// Use of this source code is governed by the MIT license that can be +// found in the LICENSE file. + +#include "shell/browser/api/electron_api_web_contents.h" + +#include "base/strings/sys_string_conversions.h" +#include "base/win/i18n.h" +#include "third_party/blink/public/mojom/renderer_preferences.mojom.h" + +namespace electron { + +namespace api { + +void WebContents::SetAcceptLanguages(blink::mojom::RendererPreferences* prefs) { + std::vector languages; + base::win::i18n::GetThreadPreferredUILanguageList(&languages); + std::string accept_langs; + for (const auto& s16 : languages) { + accept_langs += base::SysWideToUTF8(s16) + ','; + } + accept_langs.pop_back(); + prefs->accept_languages = accept_langs; +} + +} // namespace api + +} // namespace electron diff --git a/spec-main/chromium-spec.ts b/spec-main/chromium-spec.ts index 2a4320d393427..81760b01b1451 100644 --- a/spec-main/chromium-spec.ts +++ b/spec-main/chromium-spec.ts @@ -319,7 +319,8 @@ describe('chromium features', () => { const w = new BrowserWindow({ show: false }); await w.loadURL('about:blank'); const languages = await w.webContents.executeJavaScript('navigator.languages'); - expect(languages).to.deep.equal([appLocale]); + expect(languages.length).to.be.greaterThan(0); + expect(languages[0].split('-')[0]).to.equal(appLocale); }); });