Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(133)

Unified Diff: chrome/browser/platform_util_win.cc

Issue 352393002: Be explicit about target type in platform_util::OpenItem() (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Catch up with changes to JSONStringValueSerializer and address CrOS comment Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/platform_util_unittest.cc ('k') | chrome/browser/ui/ash/chrome_screenshot_grabber.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/platform_util_win.cc
diff --git a/chrome/browser/platform_util_win.cc b/chrome/browser/platform_util_win.cc
index 65aee5770565c10467cab6bc8bca600bafb7d91f..a905b2f42d1fc3e381c33fe44e901b273a568011 100644
--- a/chrome/browser/platform_util_win.cc
+++ b/chrome/browser/platform_util_win.cc
@@ -12,6 +12,7 @@
#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/files/file_path.h"
+#include "base/files/file_util.h"
#include "base/logging.h"
#include "base/metrics/field_trial.h"
#include "base/strings/string_util.h"
@@ -21,6 +22,7 @@
#include "base/win/scoped_comptr.h"
#include "base/win/windows_version.h"
#include "chrome/browser/lifetime/application_lifetime.h"
+#include "chrome/browser/platform_util_internal.h"
#include "chrome/browser/ui/host_desktop.h"
#include "chrome/common/chrome_utility_messages.h"
#include "content/public/browser/browser_thread.h"
@@ -32,8 +34,12 @@
using content::BrowserThread;
+namespace platform_util {
+
namespace {
+// TODO(asanka): Move this to ui/base/win/shell.{h,cc} and invoke it from the
+// utility process.
void ShowItemInFolderOnFileThread(const base::FilePath& full_path) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
base::FilePath dir = full_path.DirName().AsEndingWithSeparator();
@@ -102,10 +108,9 @@ void ShowItemInFolderOnFileThread(const base::FilePath& full_path) {
if (hr == ERROR_FILE_NOT_FOUND) {
ShellExecute(NULL, L"open", dir.value().c_str(), NULL, NULL, SW_SHOW);
} else {
- LOG(WARNING) << " " << __FUNCTION__
- << "(): Can't open full_path = \""
+ LOG(WARNING) << " " << __FUNCTION__ << "(): Can't open full_path = \""
<< full_path.value() << "\""
- << " hr = " << logging::SystemErrorCodeToString(hr);
+ << " hr = " << logging::SystemErrorCodeToString(hr);
}
}
}
@@ -159,47 +164,64 @@ void OpenExternalOnFileThread(const GURL& url) {
}
}
-void OpenItemViaShellInUtilityProcess(const base::FilePath& full_path) {
+void OpenItemViaShellInUtilityProcess(const base::FilePath& full_path,
+ OpenItemType type) {
base::WeakPtr<content::UtilityProcessHost> utility_process_host(
content::UtilityProcessHost::Create(NULL, NULL)->AsWeakPtr());
utility_process_host->DisableSandbox();
- utility_process_host->Send(new ChromeUtilityMsg_OpenItemViaShell(full_path));
-}
-
-} // namespace
-
-namespace platform_util {
+ switch (type) {
+ case OPEN_FILE:
+ utility_process_host->Send(
+ new ChromeUtilityMsg_OpenFileViaShell(full_path));
+ return;
-void ShowItemInFolder(Profile* profile, const base::FilePath& full_path) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ case OPEN_FOLDER:
+ utility_process_host->Send(
+ new ChromeUtilityMsg_OpenFolderViaShell(full_path));
+ return;
+ }
+}
+void ActivateDesktopIfNecessary() {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
if (chrome::GetActiveDesktop() == chrome::HOST_DESKTOP_TYPE_ASH)
chrome::ActivateDesktopHelper(chrome::ASH_KEEP_RUNNING);
+}
+
+} // namespace
+void ShowItemInFolder(Profile* profile, const base::FilePath& full_path) {
+ ActivateDesktopIfNecessary();
BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE,
base::Bind(&ShowItemInFolderOnFileThread, full_path));
}
-void OpenItem(Profile* profile, const base::FilePath& full_path) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+namespace internal {
- if (chrome::GetActiveDesktop() == chrome::HOST_DESKTOP_TYPE_ASH)
- chrome::ActivateDesktopHelper(chrome::ASH_KEEP_RUNNING);
+void PlatformOpenVerifiedItem(const base::FilePath& path, OpenItemType type) {
+ BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
+ base::Bind(&ActivateDesktopIfNecessary));
if (base::FieldTrialList::FindFullName("IsolateShellOperations") ==
"Enabled") {
BrowserThread::PostTask(
- BrowserThread::IO,
- FROM_HERE,
- base::Bind(&OpenItemViaShellInUtilityProcess, full_path));
+ BrowserThread::IO, FROM_HERE,
+ base::Bind(&OpenItemViaShellInUtilityProcess, path, type));
} else {
- BrowserThread::PostTask(
- BrowserThread::FILE,
- FROM_HERE,
- base::Bind(base::IgnoreResult(&ui::win::OpenItemViaShell), full_path));
+ switch (type) {
+ case OPEN_FILE:
+ ui::win::OpenFileViaShell(path);
+ break;
+
+ case OPEN_FOLDER:
+ ui::win::OpenFolderViaShell(path);
+ break;
+ }
}
}
+} // namespace internal
+
void OpenExternal(Profile* profile, const GURL& url) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
« no previous file with comments | « chrome/browser/platform_util_unittest.cc ('k') | chrome/browser/ui/ash/chrome_screenshot_grabber.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698