|
@@ -19,6 +19,7 @@
|
|
|
#include "base/logging.h"
|
|
|
#include "base/mac/scoped_aedesc.h"
|
|
|
#include "base/strings/sys_string_conversions.h"
|
|
|
+#include "base/task/sequenced_task_runner.h"
|
|
|
#include "base/task/thread_pool.h"
|
|
|
#include "content/public/browser/browser_task_traits.h"
|
|
|
#include "net/base/apple/url_conversions.h"
|
|
@@ -146,11 +147,27 @@ void OpenExternal(const GURL& url,
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- bool success = [[NSWorkspace sharedWorkspace] openURL:ns_url];
|
|
|
- if (success && options.activate)
|
|
|
- [NSApp activateIgnoringOtherApps:YES];
|
|
|
+ NSWorkspaceOpenConfiguration* configuration =
|
|
|
+ [NSWorkspaceOpenConfiguration configuration];
|
|
|
+ configuration.activates = options.activate;
|
|
|
+
|
|
|
+ __block OpenCallback copied_callback = std::move(callback);
|
|
|
+ scoped_refptr<base::SequencedTaskRunner> runner =
|
|
|
+ base::SequencedTaskRunner::GetCurrentDefault();
|
|
|
|
|
|
- std::move(callback).Run(success ? "" : "Failed to open URL");
|
|
|
+ [[NSWorkspace sharedWorkspace]
|
|
|
+ openURL:ns_url
|
|
|
+ configuration:configuration
|
|
|
+ completionHandler:^(NSRunningApplication* _Nullable app,
|
|
|
+ NSError* _Nullable error) {
|
|
|
+ if (error) {
|
|
|
+ runner->PostTask(FROM_HERE, base::BindOnce(std::move(copied_callback),
|
|
|
+ "Failed to open URL"));
|
|
|
+ } else {
|
|
|
+ runner->PostTask(FROM_HERE,
|
|
|
+ base::BindOnce(std::move(copied_callback), ""));
|
|
|
+ }
|
|
|
+ }];
|
|
|
}
|
|
|
|
|
|
bool MoveItemToTrashWithError(const base::FilePath& full_path,
|