browser_client.cc 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE-CHROMIUM file.
  4. #include "brightray/browser/browser_client.h"
  5. #include "base/lazy_instance.h"
  6. #include "base/no_destructor.h"
  7. #include "base/path_service.h"
  8. #include "brightray/browser/browser_main_parts.h"
  9. #include "brightray/browser/devtools_manager_delegate.h"
  10. #include "brightray/browser/media/media_capture_devices_dispatcher.h"
  11. #include "brightray/browser/notification_presenter.h"
  12. #include "brightray/browser/platform_notification_service.h"
  13. #include "content/public/browser/browser_thread.h"
  14. #include "content/public/common/url_constants.h"
  15. using content::BrowserThread;
  16. namespace brightray {
  17. namespace {
  18. BrowserClient* g_browser_client;
  19. base::LazyInstance<std::string>::DestructorAtExit
  20. g_io_thread_application_locale = LAZY_INSTANCE_INITIALIZER;
  21. base::NoDestructor<std::string> g_application_locale;
  22. void SetApplicationLocaleOnIOThread(const std::string& locale) {
  23. DCHECK_CURRENTLY_ON(BrowserThread::IO);
  24. g_io_thread_application_locale.Get() = locale;
  25. }
  26. } // namespace
  27. // static
  28. void BrowserClient::SetApplicationLocale(const std::string& locale) {
  29. DCHECK_CURRENTLY_ON(BrowserThread::UI);
  30. if (!BrowserThread::IsThreadInitialized(BrowserThread::IO) ||
  31. !BrowserThread::PostTask(
  32. BrowserThread::IO, FROM_HERE,
  33. base::BindOnce(&SetApplicationLocaleOnIOThread, locale))) {
  34. g_io_thread_application_locale.Get() = locale;
  35. }
  36. *g_application_locale = locale;
  37. }
  38. BrowserClient* BrowserClient::Get() {
  39. return g_browser_client;
  40. }
  41. BrowserClient::BrowserClient() : browser_main_parts_(nullptr) {
  42. DCHECK(!g_browser_client);
  43. g_browser_client = this;
  44. }
  45. BrowserClient::~BrowserClient() {}
  46. void BrowserClient::WebNotificationAllowed(
  47. int render_process_id,
  48. const base::Callback<void(bool, bool)>& callback) {
  49. callback.Run(false, true);
  50. }
  51. NotificationPresenter* BrowserClient::GetNotificationPresenter() {
  52. if (!notification_presenter_) {
  53. // Create a new presenter if on OS X, Linux, or Windows 7+
  54. notification_presenter_.reset(NotificationPresenter::Create());
  55. }
  56. return notification_presenter_.get();
  57. }
  58. BrowserMainParts* BrowserClient::OverrideCreateBrowserMainParts(
  59. const content::MainFunctionParams&) {
  60. return new BrowserMainParts;
  61. }
  62. content::BrowserMainParts* BrowserClient::CreateBrowserMainParts(
  63. const content::MainFunctionParams& parameters) {
  64. DCHECK(!browser_main_parts_);
  65. browser_main_parts_ = OverrideCreateBrowserMainParts(parameters);
  66. return browser_main_parts_;
  67. }
  68. content::MediaObserver* BrowserClient::GetMediaObserver() {
  69. return MediaCaptureDevicesDispatcher::GetInstance();
  70. }
  71. content::PlatformNotificationService*
  72. BrowserClient::GetPlatformNotificationService() {
  73. if (!notification_service_)
  74. notification_service_.reset(new PlatformNotificationService(this));
  75. return notification_service_.get();
  76. }
  77. void BrowserClient::GetAdditionalAllowedSchemesForFileSystem(
  78. std::vector<std::string>* additional_schemes) {
  79. additional_schemes->push_back(content::kChromeDevToolsScheme);
  80. additional_schemes->push_back(content::kChromeUIScheme);
  81. }
  82. void BrowserClient::GetAdditionalWebUISchemes(
  83. std::vector<std::string>* additional_schemes) {
  84. additional_schemes->push_back(content::kChromeDevToolsScheme);
  85. }
  86. base::FilePath BrowserClient::GetDefaultDownloadDirectory() {
  87. // ~/Downloads
  88. base::FilePath path;
  89. if (base::PathService::Get(base::DIR_HOME, &path))
  90. path = path.Append(FILE_PATH_LITERAL("Downloads"));
  91. return path;
  92. }
  93. content::DevToolsManagerDelegate* BrowserClient::GetDevToolsManagerDelegate() {
  94. return new DevToolsManagerDelegate;
  95. }
  96. std::string BrowserClient::GetApplicationLocale() {
  97. if (BrowserThread::CurrentlyOn(BrowserThread::IO))
  98. return g_io_thread_application_locale.Get();
  99. return *g_application_locale;
  100. }
  101. } // namespace brightray