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

Side by Side Diff: cloud_print/virtual_driver/posix/printer_driver_util_mac.mm

Issue 9307087: Remove code for Mac and Linux virtual print drivers. (Closed)
Patch Set: Nuke linux too Created 8 years, 10 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "cloud_print/virtual_driver/posix/printer_driver_util_posix.h"
6
7 #import <ApplicationServices/ApplicationServices.h>
8 #import <CoreServices/CoreServices.h>
9 #import <Foundation/NSAutoreleasePool.h>
10 #import <Foundation/NSAppleEventDescriptor.h>
11 #import <ScriptingBridge/SBApplication.h>
12
13 #include "base/logging.h"
14 #include "base/mac/foundation_util.h"
15 #include "base/mac/mac_logging.h"
16
17 #include <cups/backend.h>
18
19 #include <stdlib.h>
20 #include <string>
21
22 // Duplicated is chrome/common/cloud_print/cloud_print_class_mac.h
23 const AEEventClass kAECloudPrintClass = 'GCPp';
24
25 namespace cloud_print {
26 // Checks to see whether the browser process, whose bundle ID
27 // is specified by bundle ID, is running.
28 bool IsBrowserRunning(std::string bundleID) {
29 SBApplication* app = [SBApplication applicationWithBundleIdentifier:
30 [NSString stringWithUTF8String:bundleID.c_str()]];
31 if ([app isRunning]) {
32 return true;
33 }
34 return false;
35 }
36 } // namespace cloud_print
37
38 namespace printer_driver_util {
39 void LaunchPrintDialog(const std::string& outputPath,
40 const std::string& jobTitle,
41 const std::string& user,
42 const std::string& print_ticket) {
43 NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
44 OSStatus status = noErr;
45 FSRef ref;
46 // Get the bundleID of the browser.
47 std::string bundleID = base::mac::BaseBundleID();
48 // If the browser is running, send the event to it.
49 // Otherwise, send the event to the service process.
50 if (!cloud_print::IsBrowserRunning(bundleID)) {
51 // Generate the bundle ID for the Service process.
52 bundleID = bundleID + ".helper";
53 }
54 CFStringRef bundleIDCF = CFStringCreateWithCString(
55 NULL,
56 bundleID.c_str(),
57 kCFStringEncodingUTF8);
58 CFURLRef* kDontWantURL = NULL;
59 // Locate the service process with the help of the bundle ID.
60 status = LSFindApplicationForInfo(kLSUnknownCreator, bundleIDCF,
61 NULL, &ref, kDontWantURL);
62
63 if (status != noErr) {
64 OSSTATUS_LOG(ERROR, status)
65 << "Couldn't locate the process to send Apple Event";
66 exit(CUPS_BACKEND_CANCEL);
67 }
68
69 // Create the actual Apple Event.
70 NSAppleEventDescriptor* event =
71 [NSAppleEventDescriptor appleEventWithEventClass:kAECloudPrintClass
72 eventID:kAECloudPrintClass
73 targetDescriptor:nil
74 returnID:kAutoGenerateReturnID
75 transactionID:kAnyTransactionID];
76
77 if(event == nil) {
78 LOG(ERROR) << "Unable to Create Event";
79 exit(CUPS_BACKEND_CANCEL);
80 }
81
82 // Create the AppleEvent parameters.
83 NSAppleEventDescriptor* printPath =
84 [NSAppleEventDescriptor descriptorWithString:
85 [NSString stringWithUTF8String:outputPath.c_str()]];
86 NSAppleEventDescriptor* title =
87 [NSAppleEventDescriptor descriptorWithString:
88 [NSString stringWithUTF8String:jobTitle.c_str()]];
89 NSAppleEventDescriptor* mime = [NSAppleEventDescriptor
90 descriptorWithString:@"application/pdf"];
91 NSAppleEventDescriptor* ticket =
92 [NSAppleEventDescriptor descriptorWithString:
93 [NSString stringWithUTF8String:print_ticket.c_str()]];
94
95 // Create and populate the list of parameters.
96 // Note that the array starts at index 1.
97 NSAppleEventDescriptor* parameters = [NSAppleEventDescriptor listDescriptor];
98
99 if(parameters == nil) {
100 LOG(ERROR) << "Unable to Create Paramters";
101 exit(CUPS_BACKEND_CANCEL);
102 }
103
104 [parameters insertDescriptor:mime atIndex:1];
105 [parameters insertDescriptor:printPath atIndex:2];
106 [parameters insertDescriptor:title atIndex:3];
107 [parameters insertDescriptor:ticket atIndex:4];
108 [event setParamDescriptor:parameters forKeyword:kAECloudPrintClass];
109
110 // Set the application launch parameters.
111 // We are just using launch services to deliver our Apple Event.
112 LSApplicationParameters params = {
113 0, kLSLaunchDefaults , &ref, NULL, NULL, NULL, NULL };
114
115 AEDesc* initialEvent = const_cast<AEDesc*> ([event aeDesc]);
116 params.initialEvent = static_cast<AppleEvent*> (initialEvent);
117 // Deliver the Apple Event using launch services.
118 status = LSOpenApplication(&params, NULL);
119 if (status != noErr) {
120 OSSTATUS_LOG(ERROR, status) << "Unable to launch";
121 exit(CUPS_BACKEND_CANCEL);
122 }
123
124 [pool release];
125 return;
126 }
127
128 } // namespace printer_driver_util
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698