browser_client.cc 3.7 KB

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