Title: [152259] branches/safari-537-branch/Source/WebKit2

Diff

Modified: branches/safari-537-branch/Source/WebKit2/ChangeLog (152258 => 152259)


--- branches/safari-537-branch/Source/WebKit2/ChangeLog	2013-07-01 21:09:10 UTC (rev 152258)
+++ branches/safari-537-branch/Source/WebKit2/ChangeLog	2013-07-01 21:10:46 UTC (rev 152259)
@@ -1,5 +1,31 @@
 2013-07-01  Lucas Forschler  <[email protected]>
 
+        Merge r152182
+
+    2013-06-28  Anders Carlsson  <[email protected]>
+
+            Make the UI process run the Java Updater
+            https://bugs.webkit.org/show_bug.cgi?id=118197
+            <rdar://problem/14255677>
+
+            Reviewed by Sam Weinig.
+
+            Patch the relevant NSWorkspace method and pipe through the request to launch the Java updater to the UI process.
+
+            * PluginProcess/PluginProcess.h:
+            * PluginProcess/mac/PluginProcessMac.mm:
+            (WebKit::replacedNSWorkspace_launchApplicationAtURL_options_configuration_error):
+            (WebKit::initializeCocoaOverrides):
+            (WebKit::PluginProcess::launchApplicationAtURL):
+            * UIProcess/Plugins/PluginProcessProxy.h:
+            * UIProcess/Plugins/PluginProcessProxy.messages.in:
+            * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
+            (WebKit::isJavaUpdaterURL):
+            (WebKit::shouldLaunchApplicationAtURL):
+            (WebKit::PluginProcessProxy::launchApplicationAtURL):
+
+2013-07-01  Lucas Forschler  <[email protected]>
+
         Merge r152075
 
     2013-06-26  Simon Cooper  <[email protected]>

Modified: branches/safari-537-branch/Source/WebKit2/PluginProcess/PluginProcess.h (152258 => 152259)


--- branches/safari-537-branch/Source/WebKit2/PluginProcess/PluginProcess.h	2013-07-01 21:09:10 UTC (rev 152258)
+++ branches/safari-537-branch/Source/WebKit2/PluginProcess/PluginProcess.h	2013-07-01 21:10:46 UTC (rev 152259)
@@ -58,6 +58,7 @@
 #endif
 
     bool launchProcess(const String& launchPath, const Vector<String>& arguments);
+    bool launchApplicationAtURL(const String& urlString, const Vector<String>& arguments);
     bool openURL(const String& urlString, int32_t& status, String& launchedURLString);
 
 #endif

Modified: branches/safari-537-branch/Source/WebKit2/PluginProcess/mac/PluginProcessMac.mm (152258 => 152259)


--- branches/safari-537-branch/Source/WebKit2/PluginProcess/mac/PluginProcessMac.mm	2013-07-01 21:09:10 UTC (rev 152258)
+++ branches/safari-537-branch/Source/WebKit2/PluginProcess/mac/PluginProcessMac.mm	2013-07-01 21:10:46 UTC (rev 152259)
@@ -279,13 +279,39 @@
     NSConcreteTask_launch(self, _cmd);
 }
 
+static NSRunningApplication *(*NSWorkspace_launchApplicationAtURL_options_configuration_error)(NSWorkspace *, SEL, NSURL *, NSWorkspaceLaunchOptions, NSDictionary *, NSError **);
+
+static NSRunningApplication *replacedNSWorkspace_launchApplicationAtURL_options_configuration_error(NSWorkspace *self, SEL _cmd, NSURL *url, NSWorkspaceLaunchOptions options, NSDictionary *configuration, NSError **error)
+{
+    Vector<String> arguments;
+    if (NSArray *argumentsArray = [configuration objectForKey:NSWorkspaceLaunchConfigurationArguments]) {
+        if ([argumentsArray isKindOfClass:[NSArray array]]) {
+            for (NSString *argument in argumentsArray) {
+                if ([argument isKindOfClass:[NSString class]])
+                    arguments.append(argument);
+            }
+        }
+    }
+
+    if (PluginProcess::shared().launchApplicationAtURL(KURL(url).string(), arguments)) {
+        if (error)
+            *error = nil;
+        return nil;
+    }
+
+    return NSWorkspace_launchApplicationAtURL_options_configuration_error(self, _cmd, url, options, configuration, error);
+}
+
 static void initializeCocoaOverrides()
 {
     // Override -[NSConcreteTask launch:]
     Method launchMethod = class_getInstanceMethod(objc_getClass("NSConcreteTask"), @selector(launch));
-
     NSConcreteTask_launch = method_setImplementation(launchMethod, reinterpret_cast<IMP>(replacedNSConcreteTask_launch));
 
+    // Override -[NSWorkspace launchApplicationAtURL:options:configuration:error:]
+    Method launchApplicationAtURLOptionsConfigurationErrorMethod = class_getInstanceMethod(objc_getClass("NSWorkspace"), @selector(launchApplicationAtURL:options:configuration:error:));
+    NSWorkspace_launchApplicationAtURL_options_configuration_error = reinterpret_cast<NSRunningApplication *(*)(NSWorkspace *, SEL, NSURL *, NSWorkspaceLaunchOptions, NSDictionary *, NSError **)>(method_setImplementation(launchApplicationAtURLOptionsConfigurationErrorMethod, reinterpret_cast<IMP>(replacedNSWorkspace_launchApplicationAtURL_options_configuration_error)));
+
     // Override -[NSApplication runModalForWindow:]
     Method runModalForWindowMethod = class_getInstanceMethod(objc_getClass("NSApplication"), @selector(runModalForWindow:));
     NSApplication_RunModalForWindow = method_setImplementation(runModalForWindowMethod, reinterpret_cast<IMP>(replacedRunModalForWindow));
@@ -327,6 +353,15 @@
     return result;
 }
 
+bool PluginProcess::launchApplicationAtURL(const String& urlString, const Vector<String>& arguments)
+{
+    bool result = false;
+    if (!parentProcessConnection()->sendSync(Messages::PluginProcessProxy::LaunchApplicationAtURL(urlString, arguments), Messages::PluginProcessProxy::LaunchProcess::Reply(result), 0))
+        return false;
+
+    return result;
+}
+
 bool PluginProcess::openURL(const String& urlString, int32_t& status, String& launchedURLString)
 {
     bool result;

Modified: branches/safari-537-branch/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.h (152258 => 152259)


--- branches/safari-537-branch/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.h	2013-07-01 21:09:10 UTC (rev 152258)
+++ branches/safari-537-branch/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.h	2013-07-01 21:10:46 UTC (rev 152259)
@@ -136,6 +136,7 @@
     void applicationDidBecomeActive();
     void openPluginPreferencePane();
     void launchProcess(const String& launchPath, const Vector<String>& arguments, bool& result);
+    void launchApplicationAtURL(const String& urlString, const Vector<String>& arguments, bool& result);
     void openURL(const String& url, bool& result, int32_t& status, String& launchedURLString);
 #endif
 

Modified: branches/safari-537-branch/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.messages.in (152258 => 152259)


--- branches/safari-537-branch/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.messages.in	2013-07-01 21:09:10 UTC (rev 152258)
+++ branches/safari-537-branch/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.messages.in	2013-07-01 21:10:46 UTC (rev 152259)
@@ -38,6 +38,9 @@
     # Returns true if the UI process launched the process.
     LaunchProcess(WTF::String launchPath, Vector<WTF::String> arguments) -> (bool result)
 
+    # Returns true if the UI process launched the application.
+    LaunchApplicationAtURL(WTF::String url, Vector<WTF::String> arguments) -> (bool result)
+
     # Returns true if the UI process did open the URL.
     OpenURL(WTF::String urlString) -> (bool result, int32_t status, WTF::String launchedURLString)
 #endif

Modified: branches/safari-537-branch/Source/WebKit2/UIProcess/Plugins/mac/PluginProcessProxyMac.mm (152258 => 152259)


--- branches/safari-537-branch/Source/WebKit2/UIProcess/Plugins/mac/PluginProcessProxyMac.mm	2013-07-01 21:09:10 UTC (rev 152258)
+++ branches/safari-537-branch/Source/WebKit2/UIProcess/Plugins/mac/PluginProcessProxyMac.mm	2013-07-01 21:10:46 UTC (rev 152259)
@@ -397,6 +397,38 @@
     [NSTask launchedTaskWithLaunchPath:launchPath arguments:argumentsArray.get()];
 }
 
+static bool isJavaUpdaterURL(const PluginProcessAttributes& pluginProcessAttributes, const String& urlString)
+{
+    NSURL *javaUpdaterURL = [NSURL fileURLWithPathComponents:[NSArray arrayWithObjects:(NSString *)pluginProcessAttributes.moduleInfo.path, @"Contents/Resources/Java Updater.app", nil]];
+
+    return [[NSURL URLWithString:urlString] isEqual:javaUpdaterURL];
+}
+
+static bool shouldLaunchApplicationAtURL(const PluginProcessAttributes& pluginProcessAttributes, const String& urlString)
+{
+    if (pluginProcessAttributes.moduleInfo.bundleIdentifier == "com.oracle.java.JavaAppletPlugin")
+        return isJavaUpdaterURL(pluginProcessAttributes, urlString);
+
+    return false;
+}
+
+void PluginProcessProxy::launchApplicationAtURL(const String& urlString, const Vector<String>& arguments, bool& result)
+{
+    if (!shouldLaunchApplicationAtURL(m_pluginProcessAttributes, urlString)) {
+        result = false;
+        return;
+    }
+
+    result = true;
+
+    RetainPtr<NSMutableArray> argumentsArray = adoptNS([[NSMutableArray alloc] initWithCapacity:arguments.size()]);
+    for (size_t i = 0; i < arguments.size(); ++i)
+        [argumentsArray addObject:(NSString *)arguments[i]];
+
+    NSDictionary *configuration = [NSDictionary dictionaryWithObject:argumentsArray.get() forKey:NSWorkspaceLaunchConfigurationArguments];
+    [[NSWorkspace sharedWorkspace] launchApplicationAtURL:[NSURL URLWithString:urlString] options:NSWorkspaceLaunchAsync configuration:configuration error:nullptr];
+}
+
 static bool isSilverlightPreferencesURL(const PluginProcessAttributes& pluginProcessAttributes, const String& urlString)
 {
     NSURL *silverlightPreferencesURL = [NSURL fileURLWithPathComponents:[NSArray arrayWithObjects:(NSString *)pluginProcessAttributes.moduleInfo.path, @"Contents/Resources/Silverlight Preferences.app", nil]];
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to