Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chromecast/browser/cast_content_browser_client.h" | 5 #include "chromecast/browser/cast_content_browser_client.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <string> | 9 #include <string> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 41 #include "chromecast/public/media/media_pipeline_backend.h" | 41 #include "chromecast/public/media/media_pipeline_backend.h" |
| 42 #include "components/crash/content/app/breakpad_linux.h" | 42 #include "components/crash/content/app/breakpad_linux.h" |
| 43 #include "components/crash/content/browser/crash_handler_host_linux.h" | 43 #include "components/crash/content/browser/crash_handler_host_linux.h" |
| 44 #include "components/network_hints/browser/network_hints_message_filter.h" | 44 #include "components/network_hints/browser/network_hints_message_filter.h" |
| 45 #include "content/public/browser/browser_thread.h" | 45 #include "content/public/browser/browser_thread.h" |
| 46 #include "content/public/browser/certificate_request_result_type.h" | 46 #include "content/public/browser/certificate_request_result_type.h" |
| 47 #include "content/public/browser/client_certificate_delegate.h" | 47 #include "content/public/browser/client_certificate_delegate.h" |
| 48 #include "content/public/browser/render_process_host.h" | 48 #include "content/public/browser/render_process_host.h" |
| 49 #include "content/public/browser/resource_dispatcher_host.h" | 49 #include "content/public/browser/resource_dispatcher_host.h" |
| 50 #include "content/public/browser/web_contents.h" | 50 #include "content/public/browser/web_contents.h" |
| 51 #include "content/public/common/connection_filter.h" | |
| 51 #include "content/public/common/content_descriptors.h" | 52 #include "content/public/common/content_descriptors.h" |
| 52 #include "content/public/common/content_switches.h" | 53 #include "content/public/common/content_switches.h" |
| 53 #include "content/public/common/service_names.mojom.h" | 54 #include "content/public/common/service_names.mojom.h" |
| 54 #include "content/public/common/url_constants.h" | 55 #include "content/public/common/url_constants.h" |
| 55 #include "content/public/common/web_preferences.h" | 56 #include "content/public/common/web_preferences.h" |
| 56 #include "net/ssl/ssl_cert_request_info.h" | 57 #include "net/ssl/ssl_cert_request_info.h" |
| 57 #include "net/url_request/url_request_context_getter.h" | 58 #include "net/url_request/url_request_context_getter.h" |
| 59 #include "services/service_manager/public/cpp/connector.h" | |
| 58 #include "services/service_manager/public/cpp/interface_registry.h" | 60 #include "services/service_manager/public/cpp/interface_registry.h" |
| 59 #include "ui/base/resource/resource_bundle.h" | 61 #include "ui/base/resource/resource_bundle.h" |
| 60 #include "ui/display/display.h" | 62 #include "ui/display/display.h" |
| 61 #include "ui/display/screen.h" | 63 #include "ui/display/screen.h" |
| 62 #include "ui/gl/gl_switches.h" | 64 #include "ui/gl/gl_switches.h" |
| 63 | 65 |
| 64 #if defined(ENABLE_MOJO_MEDIA_IN_BROWSER_PROCESS) | 66 #if defined(ENABLE_MOJO_MEDIA_IN_BROWSER_PROCESS) |
| 65 #include "chromecast/media/service/cast_mojo_media_client.h" | 67 #include "chromecast/media/service/cast_mojo_media_client.h" |
| 66 #include "media/mojo/services/media_service.h" // nogncheck | 68 #include "media/mojo/services/media_service.h" // nogncheck |
| 67 #endif // ENABLE_MOJO_MEDIA_IN_BROWSER_PROCESS | 69 #endif // ENABLE_MOJO_MEDIA_IN_BROWSER_PROCESS |
| 68 | 70 |
| 69 #if defined(OS_ANDROID) | 71 #if defined(OS_ANDROID) |
| 70 #include "components/crash/content/browser/crash_dump_manager_android.h" | 72 #include "components/crash/content/browser/crash_dump_manager_android.h" |
| 71 #else | 73 #else |
| 72 #include "chromecast/media/cdm/cast_cdm_factory.h" | 74 #include "chromecast/media/cdm/cast_cdm_factory.h" |
| 73 #endif // defined(OS_ANDROID) | 75 #endif // defined(OS_ANDROID) |
| 74 | 76 |
| 75 namespace chromecast { | 77 namespace chromecast { |
| 76 namespace shell { | 78 namespace shell { |
| 77 | 79 |
| 78 namespace { | 80 namespace { |
| 81 | |
| 79 #if defined(ENABLE_MOJO_MEDIA_IN_BROWSER_PROCESS) | 82 #if defined(ENABLE_MOJO_MEDIA_IN_BROWSER_PROCESS) |
| 80 static std::unique_ptr<service_manager::Service> CreateMediaService( | 83 static std::unique_ptr<service_manager::Service> CreateMediaService( |
| 81 CastContentBrowserClient* browser_client) { | 84 CastContentBrowserClient* browser_client) { |
| 82 std::unique_ptr<media::CastMojoMediaClient> mojo_media_client( | 85 std::unique_ptr<media::CastMojoMediaClient> mojo_media_client( |
| 83 new media::CastMojoMediaClient( | 86 new media::CastMojoMediaClient( |
| 84 base::Bind(&CastContentBrowserClient::CreateMediaPipelineBackend, | 87 base::Bind(&CastContentBrowserClient::CreateMediaPipelineBackend, |
| 85 base::Unretained(browser_client)), | 88 base::Unretained(browser_client)), |
| 86 base::Bind(&CastContentBrowserClient::CreateCdmFactory, | 89 base::Bind(&CastContentBrowserClient::CreateCdmFactory, |
| 87 base::Unretained(browser_client)), | 90 base::Unretained(browser_client)), |
| 88 browser_client->GetVideoResolutionPolicy(), | 91 browser_client->GetVideoResolutionPolicy(), |
| 89 browser_client->media_resource_tracker())); | 92 browser_client->media_resource_tracker())); |
| 90 return std::unique_ptr<service_manager::Service>( | 93 return std::unique_ptr<service_manager::Service>( |
| 91 new ::media::MediaService(std::move(mojo_media_client))); | 94 new ::media::MediaService(std::move(mojo_media_client))); |
| 92 } | 95 } |
| 93 #endif // defined(ENABLE_MOJO_MEDIA_IN_BROWSER_PROCESS) | 96 #endif // defined(ENABLE_MOJO_MEDIA_IN_BROWSER_PROCESS) |
| 94 | 97 |
| 98 // This filter will be added to the ServiceManagerConnection for the browser | |
| 99 // process, registering these interfaces in "service:content_browser" so any | |
| 100 // external service can use them. This allows another service to connect to an | |
| 101 // interface "mojom::Foo" registered here by calling: | |
| 102 // | |
| 103 // mojom::FooPtr remote_foo; | |
| 104 // connector()->GetInterface("service:content_browser", &remote_foo"); | |
| 105 // | |
| 106 // Note: Service manifests will also need to be updated. For the example above, | |
| 107 // chromecast/browser/cast_content_browser_manifest_overlay.json will need to | |
| 108 // "provide" the interface... | |
| 109 // | |
| 110 // provides: { | |
| 111 // "foo_interfaces": [ "mojom::Foo" ] | |
| 112 // } | |
| 113 // | |
| 114 // ...and the service manifest for the remote service will need to "require" it | |
| 115 // from "content_browser": | |
| 116 // | |
| 117 // requires: { | |
| 118 // "content_browser": [ "foo_interfaces" ] | |
| 119 // } | |
| 120 // | |
| 121 // We will not filter on |remote_identity| here; instead, connection | |
| 122 // constraints will be enforced only by the manifests. | |
| 123 class ContentBrowserConnectionFilter : public content::ConnectionFilter { | |
|
alokp
2016/12/14 05:46:16
Are we using connection filter anywhere? If not I
slan
2016/12/19 17:58:18
Removed.
| |
| 124 public: | |
| 125 ContentBrowserConnectionFilter() {} | |
| 126 ~ContentBrowserConnectionFilter() override {} | |
| 127 | |
| 128 // content::ConnectionFilter implementation: | |
| 129 bool OnConnect(const service_manager::Identity& remote_identity, | |
| 130 service_manager::InterfaceRegistry* registry, | |
| 131 service_manager::Connector* connector) { | |
| 132 DCHECK(registry); | |
| 133 return true; | |
| 134 } | |
| 135 | |
| 136 private: | |
| 137 DISALLOW_COPY_AND_ASSIGN(ContentBrowserConnectionFilter); | |
| 138 }; | |
| 139 | |
| 95 } // namespace | 140 } // namespace |
| 96 | 141 |
| 97 CastContentBrowserClient::CastContentBrowserClient() | 142 CastContentBrowserClient::CastContentBrowserClient() |
| 98 : cast_browser_main_parts_(nullptr), | 143 : cast_browser_main_parts_(nullptr), |
| 99 url_request_context_factory_(new URLRequestContextFactory()) {} | 144 url_request_context_factory_(new URLRequestContextFactory()) {} |
| 100 | 145 |
| 101 CastContentBrowserClient::~CastContentBrowserClient() { | 146 CastContentBrowserClient::~CastContentBrowserClient() { |
| 102 content::BrowserThread::DeleteSoon( | 147 content::BrowserThread::DeleteSoon( |
| 103 content::BrowserThread::IO, | 148 content::BrowserThread::IO, |
| 104 FROM_HERE, | 149 FROM_HERE, |
| (...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 415 | 460 |
| 416 void CastContentBrowserClient::ExposeInterfacesToRenderer( | 461 void CastContentBrowserClient::ExposeInterfacesToRenderer( |
| 417 service_manager::InterfaceRegistry* registry, | 462 service_manager::InterfaceRegistry* registry, |
| 418 content::RenderProcessHost* render_process_host) { | 463 content::RenderProcessHost* render_process_host) { |
| 419 registry->AddInterface( | 464 registry->AddInterface( |
| 420 base::Bind(&media::MediaCapsImpl::AddBinding, | 465 base::Bind(&media::MediaCapsImpl::AddBinding, |
| 421 base::Unretained(cast_browser_main_parts_->media_caps())), | 466 base::Unretained(cast_browser_main_parts_->media_caps())), |
| 422 base::ThreadTaskRunnerHandle::Get()); | 467 base::ThreadTaskRunnerHandle::Get()); |
| 423 } | 468 } |
| 424 | 469 |
| 470 // When registering an in-process service, also update the manifest overlay in | |
| 471 // chromecast/browser/BUILD.gn to include the service. | |
| 425 void CastContentBrowserClient::RegisterInProcessServices( | 472 void CastContentBrowserClient::RegisterInProcessServices( |
| 426 StaticServiceMap* services) { | 473 StaticServiceMap* services) { |
| 427 #if defined(ENABLE_MOJO_MEDIA_IN_BROWSER_PROCESS) | 474 #if defined(ENABLE_MOJO_MEDIA_IN_BROWSER_PROCESS) |
| 428 content::ServiceInfo info; | 475 content::ServiceInfo info; |
| 429 info.factory = base::Bind(&CreateMediaService, base::Unretained(this)); | 476 info.factory = base::Bind(&CreateMediaService, base::Unretained(this)); |
| 430 info.task_runner = GetMediaTaskRunner(); | 477 info.task_runner = GetMediaTaskRunner(); |
| 431 services->insert(std::make_pair("media", info)); | 478 services->insert(std::make_pair("media", info)); |
| 432 #endif | 479 #endif |
| 433 } | 480 } |
| 434 | 481 |
| 482 void CastContentBrowserClient::AddConnectionFilters( | |
| 483 ConnectionFilterList* connection_filter_list) { | |
| 484 connection_filter_list->push_back( | |
| 485 base::MakeUnique<ContentBrowserConnectionFilter>()); | |
| 486 } | |
| 487 | |
| 435 std::unique_ptr<base::Value> | 488 std::unique_ptr<base::Value> |
| 436 CastContentBrowserClient::GetServiceManifestOverlay( | 489 CastContentBrowserClient::GetServiceManifestOverlay( |
| 437 const std::string& service_name) { | 490 const std::string& service_name) { |
| 438 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); | 491 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
| 439 if (service_name != content::mojom::kBrowserServiceName) | 492 if (service_name != content::mojom::kBrowserServiceName) |
| 440 return nullptr; | 493 return nullptr; |
| 441 base::StringPiece manifest_contents = | 494 base::StringPiece manifest_contents = |
| 442 rb.GetRawDataResourceForScale(IDR_CAST_CONTENT_BROWSER_MANIFEST_OVERLAY, | 495 rb.GetRawDataResourceForScale(IDR_CAST_CONTENT_BROWSER_MANIFEST_OVERLAY, |
| 443 ui::ScaleFactor::SCALE_FACTOR_NONE); | 496 ui::ScaleFactor::SCALE_FACTOR_NONE); |
| 444 return base::JSONReader::Read(manifest_contents); | 497 return base::JSONReader::Read(manifest_contents); |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 546 process_type, dumps_path, false /* upload */); | 599 process_type, dumps_path, false /* upload */); |
| 547 // StartUploaderThread() even though upload is diferred. | 600 // StartUploaderThread() even though upload is diferred. |
| 548 // Breakpad-related memory is freed in the uploader thread. | 601 // Breakpad-related memory is freed in the uploader thread. |
| 549 crash_handler->StartUploaderThread(); | 602 crash_handler->StartUploaderThread(); |
| 550 return crash_handler; | 603 return crash_handler; |
| 551 } | 604 } |
| 552 #endif // !defined(OS_ANDROID) | 605 #endif // !defined(OS_ANDROID) |
| 553 | 606 |
| 554 } // namespace shell | 607 } // namespace shell |
| 555 } // namespace chromecast | 608 } // namespace chromecast |
| OLD | NEW |