Commit d3269f57 authored by Robert Liao's avatar Robert Liao Committed by Commit Bot

Convert FileOperationProgressSink to use Microsoft::WRL::RuntimeClass Instead of IUnknownImpl

BUG=1014283

Change-Id: I9d553dceab196d7a1c9d254ad9e5d18da69cd13c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1860044
Commit-Queue: Min Qin <qinmin@chromium.org>
Auto-Submit: Robert Liao <robliao@chromium.org>
Reviewed-by: default avatarMin Qin <qinmin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#706090}
parent d6a7a9af
...@@ -10,10 +10,10 @@ ...@@ -10,10 +10,10 @@
#include <shellapi.h> #include <shellapi.h>
#include <shobjidl.h> #include <shobjidl.h>
#include <wrl/client.h> #include <wrl/client.h>
#include <wrl/implements.h>
#include "base/threading/scoped_blocking_call.h" #include "base/threading/scoped_blocking_call.h"
#include "base/win/com_init_util.h" #include "base/win/com_init_util.h"
#include "base/win/iunknown_impl.h"
#include "components/download/public/common/download_interrupt_reasons_utils.h" #include "components/download/public/common/download_interrupt_reasons_utils.h"
#include "components/download/public/common/download_stats.h" #include "components/download/public/common/download_stats.h"
...@@ -143,29 +143,17 @@ DownloadInterruptReason HRESULTToDownloadInterruptReason(HRESULT hr) { ...@@ -143,29 +143,17 @@ DownloadInterruptReason HRESULTToDownloadInterruptReason(HRESULT hr) {
return DOWNLOAD_INTERRUPT_REASON_FILE_FAILED; return DOWNLOAD_INTERRUPT_REASON_FILE_FAILED;
} }
class FileOperationProgressSink : public base::win::IUnknownImpl, class FileOperationProgressSink
public IFileOperationProgressSink { : public Microsoft::WRL::RuntimeClass<
Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::ClassicCom>,
IFileOperationProgressSink> {
public: public:
FileOperationProgressSink() = default; FileOperationProgressSink() = default;
HRESULT GetOperationResult() { return result_; } HRESULT GetOperationResult() { return result_; }
// base::win::IUnknownImpl:
STDMETHODIMP QueryInterface(REFIID riid, PVOID* ppv) override {
if (riid == IID_IFileOperationProgressSink) {
*ppv = static_cast<IFileOperationProgressSink*>(this);
IUnknownImpl::AddRef();
return S_OK;
}
return IUnknownImpl::QueryInterface(riid, ppv);
}
ULONG STDMETHODCALLTYPE AddRef() override { return IUnknownImpl::AddRef(); }
ULONG STDMETHODCALLTYPE Release() override { return IUnknownImpl::Release(); }
// IFileOperationProgressSink: // IFileOperationProgressSink:
HRESULT STDMETHODCALLTYPE FinishOperations(HRESULT hr) override { IFACEMETHODIMP FinishOperations(HRESULT hr) override {
// If a failure has already been captured, don't bother overriding it. That // If a failure has already been captured, don't bother overriding it. That
// way, the original failure can be propagated; in the event that the new // way, the original failure can be propagated; in the event that the new
// HRESULT is also a success, overwriting will not harm anything and // HRESULT is also a success, overwriting will not harm anything and
...@@ -175,27 +163,27 @@ class FileOperationProgressSink : public base::win::IUnknownImpl, ...@@ -175,27 +163,27 @@ class FileOperationProgressSink : public base::win::IUnknownImpl,
return S_OK; return S_OK;
} }
HRESULT STDMETHODCALLTYPE PauseTimer() override { return S_OK; } IFACEMETHODIMP PauseTimer() override { return S_OK; }
HRESULT STDMETHODCALLTYPE PostCopyItem(DWORD, IFACEMETHODIMP PostCopyItem(DWORD,
IShellItem*, IShellItem*,
IShellItem*, IShellItem*,
PCWSTR, PCWSTR,
HRESULT, HRESULT,
IShellItem*) override { IShellItem*) override {
return E_NOTIMPL; return E_NOTIMPL;
} }
HRESULT STDMETHODCALLTYPE PostDeleteItem(DWORD, IFACEMETHODIMP PostDeleteItem(DWORD,
IShellItem*, IShellItem*,
HRESULT, HRESULT,
IShellItem*) override { IShellItem*) override {
return E_NOTIMPL; return E_NOTIMPL;
} }
HRESULT STDMETHODCALLTYPE PostMoveItem(DWORD, IFACEMETHODIMP PostMoveItem(DWORD,
IShellItem*, IShellItem*,
IShellItem*, IShellItem*,
PCWSTR, PCWSTR,
HRESULT hr, HRESULT hr,
IShellItem*) override { IShellItem*) override {
// Like in FinishOperations, overwriting with a different success value // Like in FinishOperations, overwriting with a different success value
// does not have a negative impact, but replacing an existing failure will // does not have a negative impact, but replacing an existing failure will
// cause issues. // cause issues.
...@@ -203,44 +191,38 @@ class FileOperationProgressSink : public base::win::IUnknownImpl, ...@@ -203,44 +191,38 @@ class FileOperationProgressSink : public base::win::IUnknownImpl,
result_ = hr; result_ = hr;
return S_OK; return S_OK;
} }
HRESULT STDMETHODCALLTYPE PostNewItem(DWORD, IFACEMETHODIMP PostNewItem(DWORD,
IShellItem*, IShellItem*,
PCWSTR, PCWSTR,
PCWSTR, PCWSTR,
DWORD, DWORD,
HRESULT, HRESULT,
IShellItem*) override { IShellItem*) override {
return E_NOTIMPL; return E_NOTIMPL;
} }
HRESULT STDMETHODCALLTYPE IFACEMETHODIMP
PostRenameItem(DWORD, IShellItem*, PCWSTR, HRESULT, IShellItem*) override { PostRenameItem(DWORD, IShellItem*, PCWSTR, HRESULT, IShellItem*) override {
return E_NOTIMPL; return E_NOTIMPL;
} }
HRESULT STDMETHODCALLTYPE PreCopyItem(DWORD, IFACEMETHODIMP PreCopyItem(DWORD, IShellItem*, IShellItem*, PCWSTR) override {
IShellItem*,
IShellItem*,
PCWSTR) override {
return E_NOTIMPL; return E_NOTIMPL;
} }
HRESULT STDMETHODCALLTYPE PreDeleteItem(DWORD, IShellItem*) override { IFACEMETHODIMP PreDeleteItem(DWORD, IShellItem*) override {
return E_NOTIMPL; return E_NOTIMPL;
} }
HRESULT STDMETHODCALLTYPE PreMoveItem(DWORD, IFACEMETHODIMP PreMoveItem(DWORD, IShellItem*, IShellItem*, PCWSTR) override {
IShellItem*,
IShellItem*,
PCWSTR) override {
return S_OK; return S_OK;
} }
HRESULT STDMETHODCALLTYPE PreNewItem(DWORD, IShellItem*, PCWSTR) override { IFACEMETHODIMP PreNewItem(DWORD, IShellItem*, PCWSTR) override {
return E_NOTIMPL; return E_NOTIMPL;
} }
HRESULT STDMETHODCALLTYPE PreRenameItem(DWORD, IShellItem*, PCWSTR) override { IFACEMETHODIMP PreRenameItem(DWORD, IShellItem*, PCWSTR) override {
return E_NOTIMPL; return E_NOTIMPL;
} }
HRESULT STDMETHODCALLTYPE ResetTimer() override { return S_OK; } IFACEMETHODIMP ResetTimer() override { return S_OK; }
HRESULT STDMETHODCALLTYPE ResumeTimer() override { return S_OK; } IFACEMETHODIMP ResumeTimer() override { return S_OK; }
HRESULT STDMETHODCALLTYPE StartOperations() override { return S_OK; } IFACEMETHODIMP StartOperations() override { return S_OK; }
HRESULT STDMETHODCALLTYPE UpdateProgress(UINT, UINT) override { return S_OK; } IFACEMETHODIMP UpdateProgress(UINT, UINT) override { return S_OK; }
protected: protected:
~FileOperationProgressSink() override = default; ~FileOperationProgressSink() override = default;
...@@ -290,11 +272,12 @@ DownloadInterruptReason BaseFile::MoveFileAndAdjustPermissions( ...@@ -290,11 +272,12 @@ DownloadInterruptReason BaseFile::MoveFileAndAdjustPermissions(
FOF_NO_UI | FOF_NOCOPYSECURITYATTRIBS | FOFX_EARLYFAILURE); FOF_NO_UI | FOF_NOCOPYSECURITYATTRIBS | FOFX_EARLYFAILURE);
} }
scoped_refptr<FileOperationProgressSink> sink(new FileOperationProgressSink); Microsoft::WRL::ComPtr<FileOperationProgressSink> sink =
Microsoft::WRL::Make<FileOperationProgressSink>();
if (SUCCEEDED(hr)) { if (SUCCEEDED(hr)) {
hr = file_operation->MoveItem(original_path.Get(), destination_folder.Get(), hr = file_operation->MoveItem(original_path.Get(), destination_folder.Get(),
new_path.BaseName().value().c_str(), new_path.BaseName().value().c_str(),
sink.get()); sink.Get());
} }
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
......
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