Commit eb6c56e1 authored by Anand K. Mistry's avatar Anand K. Mistry Committed by Commit Bot

[Extensions Functions] Migrate desktop capture APIs to ExtensionFunction

Bug: 634140
Change-Id: Ic09bdb2d88b59af4778bd6c1eed2afb39375bedb
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2041716Reviewed-by: default avatarWez <wez@chromium.org>
Reviewed-by: default avatarBen Wells <benwells@chromium.org>
Commit-Queue: Anand Mistry <amistry@chromium.org>
Cr-Commit-Position: refs/heads/master@{#740536}
parent 236ebdb2
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include "base/command_line.h" #include "base/command_line.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "chrome/browser/extensions/chrome_extension_function_details.h"
#include "chrome/browser/extensions/extension_tab_util.h" #include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
#include "chrome/common/chrome_switches.h" #include "chrome/common/chrome_switches.h"
...@@ -37,7 +38,8 @@ DesktopCaptureChooseDesktopMediaFunction:: ...@@ -37,7 +38,8 @@ DesktopCaptureChooseDesktopMediaFunction::
~DesktopCaptureChooseDesktopMediaFunction() { ~DesktopCaptureChooseDesktopMediaFunction() {
} }
bool DesktopCaptureChooseDesktopMediaFunction::RunAsync() { ExtensionFunction::ResponseAction
DesktopCaptureChooseDesktopMediaFunction::Run() {
EXTENSION_FUNCTION_VALIDATE(args_->GetSize() > 0); EXTENSION_FUNCTION_VALIDATE(args_->GetSize() > 0);
EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &request_id_)); EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &request_id_));
...@@ -57,35 +59,32 @@ bool DesktopCaptureChooseDesktopMediaFunction::RunAsync() { ...@@ -57,35 +59,32 @@ bool DesktopCaptureChooseDesktopMediaFunction::RunAsync() {
GURL origin; GURL origin;
if (params->target_tab) { if (params->target_tab) {
if (!params->target_tab->url) { if (!params->target_tab->url) {
error_ = kDesktopCaptureApiNoUrlError; return RespondNow(Error(kDesktopCaptureApiNoUrlError));
return false;
} }
origin = GURL(*(params->target_tab->url)).GetOrigin(); origin = GURL(*(params->target_tab->url)).GetOrigin();
if (!origin.is_valid()) { if (!origin.is_valid()) {
error_ = kDesktopCaptureApiInvalidOriginError; return RespondNow(Error(kDesktopCaptureApiInvalidOriginError));
return false;
} }
if (!base::CommandLine::ForCurrentProcess()->HasSwitch( if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
::switches::kAllowHttpScreenCapture) && ::switches::kAllowHttpScreenCapture) &&
!content::IsOriginSecure(origin)) { !content::IsOriginSecure(origin)) {
error_ = kDesktopCaptureApiTabUrlNotSecure; return RespondNow(Error(kDesktopCaptureApiTabUrlNotSecure));
return false;
} }
target_name = base::UTF8ToUTF16(content::IsOriginSecure(origin) ? target_name = base::UTF8ToUTF16(content::IsOriginSecure(origin) ?
net::GetHostAndOptionalPort(origin) : origin.spec()); net::GetHostAndOptionalPort(origin) : origin.spec());
if (!params->target_tab->id || if (!params->target_tab->id ||
*params->target_tab->id == api::tabs::TAB_ID_NONE) { *params->target_tab->id == api::tabs::TAB_ID_NONE) {
error_ = kDesktopCaptureApiNoTabIdError; return RespondNow(Error(kDesktopCaptureApiNoTabIdError));
return false;
} }
if (!ExtensionTabUtil::GetTabById(*(params->target_tab->id), GetProfile(), ChromeExtensionFunctionDetails details(this);
true, &web_contents)) { if (!ExtensionTabUtil::GetTabById(*(params->target_tab->id),
error_ = kDesktopCaptureApiInvalidTabIdError; details.GetProfile(), true,
return false; &web_contents)) {
return RespondNow(Error(kDesktopCaptureApiInvalidTabIdError));
} }
DCHECK(web_contents); DCHECK(web_contents);
} else { } else {
......
...@@ -21,7 +21,7 @@ class DesktopCaptureChooseDesktopMediaFunction ...@@ -21,7 +21,7 @@ class DesktopCaptureChooseDesktopMediaFunction
~DesktopCaptureChooseDesktopMediaFunction() override; ~DesktopCaptureChooseDesktopMediaFunction() override;
// ExtensionFunction overrides. // ExtensionFunction overrides.
bool RunAsync() override; ResponseAction Run() override;
// Returns the target name to show in the picker when capture is requested for // Returns the target name to show in the picker when capture is requested for
// an extension. Currently this is the same as the application name. // an extension. Currently this is the same as the application name.
......
...@@ -68,11 +68,11 @@ void DesktopCaptureChooseDesktopMediaFunctionBase::Cancel() { ...@@ -68,11 +68,11 @@ void DesktopCaptureChooseDesktopMediaFunctionBase::Cancel() {
// If this picker dialog is open, this will close it. // If this picker dialog is open, this will close it.
picker_controller_.reset(); picker_controller_.reset();
SetResultList(Create(std::string(), Options())); Respond(ArgumentList(Create(std::string(), Options())));
SendResponse(true);
} }
bool DesktopCaptureChooseDesktopMediaFunctionBase::Execute( ExtensionFunction::ResponseAction
DesktopCaptureChooseDesktopMediaFunctionBase::Execute(
const std::vector<api::desktop_capture::DesktopCaptureSourceType>& sources, const std::vector<api::desktop_capture::DesktopCaptureSourceType>& sources,
content::WebContents* web_contents, content::WebContents* web_contents,
const GURL& origin, const GURL& origin,
...@@ -96,8 +96,7 @@ bool DesktopCaptureChooseDesktopMediaFunctionBase::Execute( ...@@ -96,8 +96,7 @@ bool DesktopCaptureChooseDesktopMediaFunctionBase::Execute(
for (auto source_type : sources) { for (auto source_type : sources) {
switch (source_type) { switch (source_type) {
case api::desktop_capture::DESKTOP_CAPTURE_SOURCE_TYPE_NONE: { case api::desktop_capture::DESKTOP_CAPTURE_SOURCE_TYPE_NONE: {
error_ = kInvalidSourceNameError; return RespondNow(Error(kInvalidSourceNameError));
return false;
} }
case api::desktop_capture::DESKTOP_CAPTURE_SOURCE_TYPE_SCREEN: { case api::desktop_capture::DESKTOP_CAPTURE_SOURCE_TYPE_SCREEN: {
media_types.push_back(content::DesktopMediaID::TYPE_SCREEN); media_types.push_back(content::DesktopMediaID::TYPE_SCREEN);
...@@ -135,7 +134,7 @@ bool DesktopCaptureChooseDesktopMediaFunctionBase::Execute( ...@@ -135,7 +134,7 @@ bool DesktopCaptureChooseDesktopMediaFunctionBase::Execute(
std::make_unique<DesktopMediaPickerController>(g_picker_factory); std::make_unique<DesktopMediaPickerController>(g_picker_factory);
picker_controller_->Show(picker_params, std::move(media_types), picker_controller_->Show(picker_params, std::move(media_types),
std::move(callback)); std::move(callback));
return true; return RespondLater();
} }
std::string DesktopCaptureChooseDesktopMediaFunctionBase::GetCallerDisplayName() std::string DesktopCaptureChooseDesktopMediaFunctionBase::GetCallerDisplayName()
...@@ -156,15 +155,13 @@ void DesktopCaptureChooseDesktopMediaFunctionBase::OnPickerDialogResults( ...@@ -156,15 +155,13 @@ void DesktopCaptureChooseDesktopMediaFunctionBase::OnPickerDialogResults(
picker_controller_.reset(); picker_controller_.reset();
if (!err.empty()) { if (!err.empty()) {
SetError(err); Respond(Error(err));
SendResponse(false);
return; return;
} }
if (source.is_null()) { if (source.is_null()) {
DLOG(ERROR) << "Sending empty results."; DLOG(ERROR) << "Sending empty results.";
SetResultList(Create(std::string(), Options())); Respond(ArgumentList(Create(std::string(), Options())));
SendResponse(true);
return; return;
} }
...@@ -184,8 +181,7 @@ void DesktopCaptureChooseDesktopMediaFunctionBase::OnPickerDialogResults( ...@@ -184,8 +181,7 @@ void DesktopCaptureChooseDesktopMediaFunctionBase::OnPickerDialogResults(
Options options; Options options;
options.can_request_audio_track = source.audio_share; options.can_request_audio_track = source.audio_share;
SetResultList(Create(result, options)); Respond(ArgumentList(Create(result, options)));
SendResponse(true);
} }
DesktopCaptureRequestsRegistry::RequestId::RequestId(int process_id, DesktopCaptureRequestsRegistry::RequestId::RequestId(int process_id,
......
...@@ -12,17 +12,16 @@ ...@@ -12,17 +12,16 @@
#include "base/macros.h" #include "base/macros.h"
#include "base/memory/singleton.h" #include "base/memory/singleton.h"
#include "chrome/browser/extensions/chrome_extension_function.h"
#include "chrome/browser/media/webrtc/desktop_media_list.h" #include "chrome/browser/media/webrtc/desktop_media_list.h"
#include "chrome/browser/media/webrtc/desktop_media_picker_controller.h" #include "chrome/browser/media/webrtc/desktop_media_picker_controller.h"
#include "chrome/browser/media/webrtc/desktop_media_picker_factory.h" #include "chrome/browser/media/webrtc/desktop_media_picker_factory.h"
#include "chrome/common/extensions/api/desktop_capture.h" #include "chrome/common/extensions/api/desktop_capture.h"
#include "extensions/browser/extension_function.h"
#include "url/gurl.h" #include "url/gurl.h"
namespace extensions { namespace extensions {
class DesktopCaptureChooseDesktopMediaFunctionBase class DesktopCaptureChooseDesktopMediaFunctionBase : public ExtensionFunction {
: public ChromeAsyncExtensionFunction {
public: public:
// Used to set PickerFactory used to create mock DesktopMediaPicker instances // Used to set PickerFactory used to create mock DesktopMediaPicker instances
// for tests. Calling tests keep ownership of the factory. Can be called with // for tests. Calling tests keep ownership of the factory. Can be called with
...@@ -40,11 +39,12 @@ class DesktopCaptureChooseDesktopMediaFunctionBase ...@@ -40,11 +39,12 @@ class DesktopCaptureChooseDesktopMediaFunctionBase
// also be used to determine where to show the picker's UI. // also be used to determine where to show the picker's UI.
// |origin| is the origin for which the stream is created. // |origin| is the origin for which the stream is created.
// |target_name| is the display name of the stream target. // |target_name| is the display name of the stream target.
bool Execute(const std::vector< ResponseAction Execute(
api::desktop_capture::DesktopCaptureSourceType>& sources, const std::vector<api::desktop_capture::DesktopCaptureSourceType>&
content::WebContents* web_contents, sources,
const GURL& origin, content::WebContents* web_contents,
const base::string16 target_name); const GURL& origin,
const base::string16 target_name);
// Returns the calling application name to show in the picker. // Returns the calling application name to show in the picker.
std::string GetCallerDisplayName() const; std::string GetCallerDisplayName() const;
......
...@@ -33,7 +33,8 @@ WebrtcDesktopCapturePrivateChooseDesktopMediaFunction:: ...@@ -33,7 +33,8 @@ WebrtcDesktopCapturePrivateChooseDesktopMediaFunction::
~WebrtcDesktopCapturePrivateChooseDesktopMediaFunction() { ~WebrtcDesktopCapturePrivateChooseDesktopMediaFunction() {
} }
bool WebrtcDesktopCapturePrivateChooseDesktopMediaFunction::RunAsync() { ExtensionFunction::ResponseAction
WebrtcDesktopCapturePrivateChooseDesktopMediaFunction::Run() {
using Params = using Params =
extensions::api::webrtc_desktop_capture_private::ChooseDesktopMedia extensions::api::webrtc_desktop_capture_private::ChooseDesktopMedia
::Params; ::Params;
...@@ -53,16 +54,14 @@ bool WebrtcDesktopCapturePrivateChooseDesktopMediaFunction::RunAsync() { ...@@ -53,16 +54,14 @@ bool WebrtcDesktopCapturePrivateChooseDesktopMediaFunction::RunAsync() {
params->request.guest_render_frame_id); params->request.guest_render_frame_id);
if (!rfh) { if (!rfh) {
error_ = kTargetNotFoundError; return RespondNow(Error(kTargetNotFoundError));
return false;
} }
GURL origin = rfh->GetLastCommittedURL().GetOrigin(); GURL origin = rfh->GetLastCommittedURL().GetOrigin();
if (!base::CommandLine::ForCurrentProcess()->HasSwitch( if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
::switches::kAllowHttpScreenCapture) && ::switches::kAllowHttpScreenCapture) &&
!content::IsOriginSecure(origin)) { !content::IsOriginSecure(origin)) {
error_ = kUrlNotSecure; return RespondNow(Error(kUrlNotSecure));
return false;
} }
base::string16 target_name = base::UTF8ToUTF16( base::string16 target_name = base::UTF8ToUTF16(
content::IsOriginSecure(origin) ? net::GetHostAndOptionalPort(origin) content::IsOriginSecure(origin) ? net::GetHostAndOptionalPort(origin)
...@@ -71,8 +70,7 @@ bool WebrtcDesktopCapturePrivateChooseDesktopMediaFunction::RunAsync() { ...@@ -71,8 +70,7 @@ bool WebrtcDesktopCapturePrivateChooseDesktopMediaFunction::RunAsync() {
content::WebContents* web_contents = content::WebContents* web_contents =
content::WebContents::FromRenderFrameHost(rfh); content::WebContents::FromRenderFrameHost(rfh);
if (!web_contents) { if (!web_contents) {
error_ = kTargetNotFoundError; return RespondNow(Error(kTargetNotFoundError));
return false;
} }
using Sources = std::vector<api::desktop_capture::DesktopCaptureSourceType>; using Sources = std::vector<api::desktop_capture::DesktopCaptureSourceType>;
......
...@@ -20,7 +20,7 @@ class WebrtcDesktopCapturePrivateChooseDesktopMediaFunction ...@@ -20,7 +20,7 @@ class WebrtcDesktopCapturePrivateChooseDesktopMediaFunction
~WebrtcDesktopCapturePrivateChooseDesktopMediaFunction() override; ~WebrtcDesktopCapturePrivateChooseDesktopMediaFunction() override;
// ExtensionFunction overrides. // ExtensionFunction overrides.
bool RunAsync() override; ResponseAction Run() override;
}; };
class WebrtcDesktopCapturePrivateCancelChooseDesktopMediaFunction class WebrtcDesktopCapturePrivateCancelChooseDesktopMediaFunction
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment