Index: cloud_print/virtual_driver/posix/installer_util_mac.mm |
diff --git a/cloud_print/virtual_driver/posix/installer_util_mac.mm b/cloud_print/virtual_driver/posix/installer_util_mac.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c6179c1be77ff0497960f20702abb7cb0a2a6683 |
--- /dev/null |
+++ b/cloud_print/virtual_driver/posix/installer_util_mac.mm |
@@ -0,0 +1,65 @@ |
+// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "cloud_print/virtual_driver/posix/installer_util_mac.h" |
+ |
+#import <ApplicationServices/ApplicationServices.h> |
+#import <Foundation/NSAutoreleasePool.h> |
+#import <Foundation/NSAppleEventDescriptor.h> |
+#import <CoreServices/CoreServices.h> |
+ |
+#include "base/mac/foundation_util.h" |
+ |
+#include <stdlib.h> |
+#include <string> |
+#include <iostream> |
+ |
+namespace cloud_print { |
+// Sends an event of a class Type sendClass to the Chromium |
+// service process. Used to install and uninstall the Cloud |
+// Print driver on Mac. |
+void sendServiceProcessEvent(const AEEventClass sendClass) { |
+ FSRef ref; |
+ OSStatus status = noErr; |
+ CFURLRef* kDontWantURL = NULL; |
+ |
+ std::string bundleID = base::mac::BaseBundleID(); |
+ CFStringRef bundleIDCF = CFStringCreateWithCString(NULL, bundleID.c_str(), |
+ kCFStringEncodingUTF8); |
+ |
+ status = LSFindApplicationForInfo(kLSUnknownCreator, bundleIDCF, NULL, |
+ &ref, kDontWantURL); |
+ |
+ if (status != noErr) { |
+ std::cerr << "Failed to make path ref"; |
+ std::cerr << GetMacOSStatusErrorString(status); |
+ std::cerr << GetMacOSStatusCommentString(status); |
+ exit(-1); |
+ } |
+ |
+ NSAppleEventDescriptor* sendEvent = |
+ [NSAppleEventDescriptor appleEventWithEventClass:sendClass |
+ eventID:sendClass |
+ targetDescriptor:nil |
+ returnID:kAutoGenerateReturnID |
+ transactionID:kAnyTransactionID]; |
+ if (sendEvent == nil) { |
+ // Write to system error log using cerr. |
+ std::cerr << "Unable to create Apple Event"; |
+ } |
+ LSApplicationParameters params = { 0, kLSLaunchDefaults, &ref, NULL, NULL, |
+ NULL, NULL }; |
+ AEDesc* initialEvent = const_cast<AEDesc*> ([sendEvent aeDesc]); |
+ params.initialEvent = static_cast<AppleEvent*> (initialEvent); |
+ status = LSOpenApplication(¶ms, NULL); |
+ |
+ if (status != noErr) { |
+ std::cerr << "Unable to launch Chrome to install"; |
+ std::cerr << GetMacOSStatusErrorString(status); |
+ std::cerr << GetMacOSStatusCommentString(status); |
+ exit(-1); |
+ } |
+} |
+ |
+} // namespace cloud_print |