| 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
 | 
| 
 |