Commit 1a49e225 authored by Mohsen Izadi's avatar Mohsen Izadi Committed by Commit Bot

Make callback in BrowserGpuClientDelegate non-member function

BrowserGpuClientDelegate might have been destroyed when
OnEstablishGpuChannel callback is run. Although this callback does not
use |this| and just runs the other callback passed to it, it is
technically an undefined behavior. Making it a non-member function,
helps us avoid this undefined behavior.

BUG=872140,872219,872244

Change-Id: Id7641c6c3ff2dcb153e9ed9b245013e878cc947a
Reviewed-on: https://chromium-review.googlesource.com/1169964Reviewed-by: default avatarAntoine Labour <piman@chromium.org>
Commit-Queue: Mohsen Izadi <mohsen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#582031}
parent 26472499
...@@ -4,11 +4,42 @@ ...@@ -4,11 +4,42 @@
#include "content/browser/gpu/browser_gpu_client_delegate.h" #include "content/browser/gpu/browser_gpu_client_delegate.h"
#include "content/browser/gpu/gpu_process_host.h"
#include "gpu/config/gpu_feature_info.h" #include "gpu/config/gpu_feature_info.h"
#include "gpu/config/gpu_info.h" #include "gpu/config/gpu_info.h"
#include "mojo/public/cpp/system/message_pipe.h" #include "mojo/public/cpp/system/message_pipe.h"
namespace content { namespace content {
namespace {
void OnEstablishGpuChannel(
GpuClientDelegate::EstablishGpuChannelCallback callback,
mojo::ScopedMessagePipeHandle channel_handle,
const gpu::GPUInfo& gpu_info,
const gpu::GpuFeatureInfo& gpu_feature_info,
GpuProcessHost::EstablishChannelStatus status) {
if (!callback)
return;
GpuClientDelegate::EstablishGpuChannelStatus delegate_status;
switch (status) {
case GpuProcessHost::EstablishChannelStatus::GPU_ACCESS_DENIED:
delegate_status =
GpuClientDelegate::EstablishGpuChannelStatus::kGpuAccessDenied;
break;
case GpuProcessHost::EstablishChannelStatus::GPU_HOST_INVALID:
delegate_status =
GpuClientDelegate::EstablishGpuChannelStatus::kGpuHostInvalid;
break;
case GpuProcessHost::EstablishChannelStatus::SUCCESS:
delegate_status = GpuClientDelegate::EstablishGpuChannelStatus::kSuccess;
break;
}
std::move(callback).Run(std::move(channel_handle), gpu_info, gpu_feature_info,
delegate_status);
}
} // namespace
BrowserGpuClientDelegate::BrowserGpuClientDelegate() = default; BrowserGpuClientDelegate::BrowserGpuClientDelegate() = default;
...@@ -35,35 +66,7 @@ void BrowserGpuClientDelegate::EstablishGpuChannel( ...@@ -35,35 +66,7 @@ void BrowserGpuClientDelegate::EstablishGpuChannel(
const bool is_gpu_host = false; const bool is_gpu_host = false;
host->EstablishGpuChannel( host->EstablishGpuChannel(
client_id, client_tracing_id, is_gpu_host, client_id, client_tracing_id, is_gpu_host,
base::BindOnce(&BrowserGpuClientDelegate::OnEstablishGpuChannel, base::BindOnce(&OnEstablishGpuChannel, std::move(callback)));
base::Unretained(this), std::move(callback)));
}
void BrowserGpuClientDelegate::OnEstablishGpuChannel(
GpuClientDelegate::EstablishGpuChannelCallback callback,
mojo::ScopedMessagePipeHandle channel_handle,
const gpu::GPUInfo& gpu_info,
const gpu::GpuFeatureInfo& gpu_feature_info,
GpuProcessHost::EstablishChannelStatus status) {
if (!callback)
return;
GpuClientDelegate::EstablishGpuChannelStatus delegate_status;
switch (status) {
case GpuProcessHost::EstablishChannelStatus::GPU_ACCESS_DENIED:
delegate_status =
GpuClientDelegate::EstablishGpuChannelStatus::kGpuAccessDenied;
break;
case GpuProcessHost::EstablishChannelStatus::GPU_HOST_INVALID:
delegate_status =
GpuClientDelegate::EstablishGpuChannelStatus::kGpuHostInvalid;
break;
case GpuProcessHost::EstablishChannelStatus::SUCCESS:
delegate_status = GpuClientDelegate::EstablishGpuChannelStatus::kSuccess;
break;
}
std::move(callback).Run(std::move(channel_handle), gpu_info, gpu_feature_info,
delegate_status);
} }
} // namespace content } // namespace content
...@@ -6,7 +6,6 @@ ...@@ -6,7 +6,6 @@
#define CONTENT_BROWSER_GPU_BROWSER_GPU_CLIENT_DELEGATE_H_ #define CONTENT_BROWSER_GPU_BROWSER_GPU_CLIENT_DELEGATE_H_
#include "content/browser/gpu/gpu_client_delegate.h" #include "content/browser/gpu/gpu_client_delegate.h"
#include "content/browser/gpu/gpu_process_host.h"
namespace content { namespace content {
...@@ -22,13 +21,6 @@ class BrowserGpuClientDelegate : public GpuClientDelegate { ...@@ -22,13 +21,6 @@ class BrowserGpuClientDelegate : public GpuClientDelegate {
EstablishGpuChannelCallback callback) override; EstablishGpuChannelCallback callback) override;
private: private:
void OnEstablishGpuChannel(
GpuClientDelegate::EstablishGpuChannelCallback callback,
mojo::ScopedMessagePipeHandle channel_handle,
const gpu::GPUInfo& gpu_info,
const gpu::GpuFeatureInfo& gpu_feature_info,
GpuProcessHost::EstablishChannelStatus status);
DISALLOW_COPY_AND_ASSIGN(BrowserGpuClientDelegate); DISALLOW_COPY_AND_ASSIGN(BrowserGpuClientDelegate);
}; };
......
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