Index: chrome/browser/app_controller_mac.mm |
diff --git a/chrome/browser/app_controller_mac.mm b/chrome/browser/app_controller_mac.mm |
index 032f72d35e2cc1d92aea62377c43c8baf54e2f16..f4d8f22592a11237269acc713bdd418f97d81d35 100644 |
--- a/chrome/browser/app_controller_mac.mm |
+++ b/chrome/browser/app_controller_mac.mm |
@@ -21,8 +21,11 @@ |
#include "chrome/browser/download/download_manager.h" |
#include "chrome/browser/instant/instant_confirm_dialog.h" |
#include "chrome/browser/prefs/pref_service.h" |
+#include "chrome/browser/printing/cloud_print/virtual_driver_install_helper.h" |
+#include "chrome/browser/printing/print_dialog_cloud.h" |
#include "chrome/browser/printing/print_job_manager.h" |
#include "chrome/browser/profiles/profile_manager.h" |
+#include "chrome/browser/service/service_process_control.h" |
#include "chrome/browser/sessions/session_service.h" |
#include "chrome/browser/sessions/session_service_factory.h" |
#include "chrome/browser/sessions/tab_restore_service.h" |
@@ -51,10 +54,12 @@ |
#include "chrome/common/chrome_paths_internal.h" |
#include "chrome/common/chrome_switches.h" |
#include "chrome/common/pref_names.h" |
+#include "chrome/common/service_messages.h" |
#include "chrome/common/url_constants.h" |
#include "content/browser/browser_thread.h" |
#include "content/browser/tab_contents/tab_contents.h" |
#include "content/browser/user_metrics.h" |
+#include "content/common/cloud_print_class_mac.h" |
#include "content/common/content_notification_types.h" |
#include "content/common/notification_service.h" |
#include "grit/chromium_strings.h" |
@@ -154,6 +159,9 @@ void RecordLastRunAppBundlePath() { |
} // anonymous namespace |
+const AEEventClass kAECloudPrintInstallClass = 'GCPi'; |
+const AEEventClass kAECloudPrintUninstallClass = 'GCPu'; |
+ |
@interface AppController (Private) |
- (void)initMenuState; |
- (void)initProfileMenu; |
@@ -162,6 +170,9 @@ void RecordLastRunAppBundlePath() { |
- (void)openUrls:(const std::vector<GURL>&)urls; |
- (void)getUrl:(NSAppleEventDescriptor*)event |
withReply:(NSAppleEventDescriptor*)reply; |
+- (void)submitCloudPrintJob:(NSAppleEventDescriptor*)event; |
+- (void)installCloudPrint:(NSAppleEventDescriptor*)event; |
+- (void)uninstallCloudPrint:(NSAppleEventDescriptor*)event; |
- (void)windowLayeringDidChange:(NSNotification*)inNotification; |
- (void)windowChangedToProfile:(Profile*)profile; |
- (void)checkForAnyKeyWindows; |
@@ -185,6 +196,19 @@ void RecordLastRunAppBundlePath() { |
forEventClass:kInternetEventClass |
andEventID:kAEGetURL]; |
[em setEventHandler:self |
+ andSelector:@selector(submitCloudPrintJob:) |
+ forEventClass:content::kAECloudPrintClass |
+ andEventID:content::kAECloudPrintClass]; |
+ // Install and uninstall handlers for virtual drivers. |
+ [em setEventHandler:self |
+ andSelector:@selector(installCloudPrint:) |
+ forEventClass:kAECloudPrintInstallClass |
+ andEventID:kAECloudPrintInstallClass]; |
+ [em setEventHandler:self |
+ andSelector:@selector(uninstallCloudPrint:) |
+ forEventClass:kAECloudPrintUninstallClass |
+ andEventID:kAECloudPrintUninstallClass]; |
+ [em setEventHandler:self |
andSelector:@selector(getUrl:withReply:) |
forEventClass:'WWW!' // A particularly ancient AppleEvent that dates |
andEventID:'OURL']; // back to the Spyglass days. |
@@ -1071,6 +1095,38 @@ void RecordLastRunAppBundlePath() { |
[self openUrls:gurlVector]; |
} |
+// Apple Event handler that receives print event from service |
+// process, gets the required data and launches Print dialog. |
+- (void)submitCloudPrintJob:(NSAppleEventDescriptor*)event { |
+ // Pull parameter list out of Apple Event. |
+ NSAppleEventDescriptor *paramList = |
+ [event paramDescriptorForKeyword:content::kAECloudPrintClass]; |
+ |
+ if (paramList != nil) { |
+ // Pull required fields out of parameter list. |
+ NSString* mime = [[paramList descriptorAtIndex:1] stringValue]; |
+ NSString* inputPath = [[paramList descriptorAtIndex:2] stringValue]; |
+ NSString* printTitle = [[paramList descriptorAtIndex:3] stringValue]; |
+ // Convert the title to UTF 16 as required. |
+ string16 title16 = base::SysNSStringToUTF16(printTitle); |
+ print_dialog_cloud::CreatePrintDialogForFile( |
+ FilePath([inputPath UTF8String]), title16, |
+ [mime UTF8String], /*modal=*/false); |
+ } |
+} |
+ |
+// Calls the helper class to install the virtual driver to the |
+// service process. |
+- (void)installCloudPrint:(NSAppleEventDescriptor*)event { |
+ cloud_print::VirtualDriverInstallHelper::SetUpInstall(); |
+} |
+ |
+// Calls the helper class to uninstall the virtual driver to the |
+// service process. |
+- (void)uninstallCloudPrint:(NSAppleEventDescriptor*)event { |
+ cloud_print::VirtualDriverInstallHelper::SetUpUninstall(); |
+} |
+ |
- (void)application:(NSApplication*)sender |
openFiles:(NSArray*)filenames { |
std::vector<GURL> gurlVector; |