Changeset 152182 in webkit
- Timestamp:
- Jun 28, 2013 11:57:39 AM (11 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r152177 r152182 1 2013-06-28 Anders Carlsson <andersca@apple.com> 2 3 Make the UI process run the Java Updater 4 https://bugs.webkit.org/show_bug.cgi?id=118197 5 <rdar://problem/14255677> 6 7 Reviewed by Sam Weinig. 8 9 Patch the relevant NSWorkspace method and pipe through the request to launch the Java updater to the UI process. 10 11 * PluginProcess/PluginProcess.h: 12 * PluginProcess/mac/PluginProcessMac.mm: 13 (WebKit::replacedNSWorkspace_launchApplicationAtURL_options_configuration_error): 14 (WebKit::initializeCocoaOverrides): 15 (WebKit::PluginProcess::launchApplicationAtURL): 16 * UIProcess/Plugins/PluginProcessProxy.h: 17 * UIProcess/Plugins/PluginProcessProxy.messages.in: 18 * UIProcess/Plugins/mac/PluginProcessProxyMac.mm: 19 (WebKit::isJavaUpdaterURL): 20 (WebKit::shouldLaunchApplicationAtURL): 21 (WebKit::PluginProcessProxy::launchApplicationAtURL): 22 1 23 2013-06-28 Tim Horton <timothy_horton@apple.com> 2 24 -
trunk/Source/WebKit2/PluginProcess/PluginProcess.h
r151748 r152182 59 59 60 60 bool launchProcess(const String& launchPath, const Vector<String>& arguments); 61 bool launchApplicationAtURL(const String& urlString, const Vector<String>& arguments); 61 62 bool openURL(const String& urlString, int32_t& status, String& launchedURLString); 62 63 -
trunk/Source/WebKit2/PluginProcess/mac/PluginProcessMac.mm
r151748 r152182 280 280 } 281 281 282 static NSRunningApplication *(*NSWorkspace_launchApplicationAtURL_options_configuration_error)(NSWorkspace *, SEL, NSURL *, NSWorkspaceLaunchOptions, NSDictionary *, NSError **); 283 284 static NSRunningApplication *replacedNSWorkspace_launchApplicationAtURL_options_configuration_error(NSWorkspace *self, SEL _cmd, NSURL *url, NSWorkspaceLaunchOptions options, NSDictionary *configuration, NSError **error) 285 { 286 Vector<String> arguments; 287 if (NSArray *argumentsArray = [configuration objectForKey:NSWorkspaceLaunchConfigurationArguments]) { 288 if ([argumentsArray isKindOfClass:[NSArray array]]) { 289 for (NSString *argument in argumentsArray) { 290 if ([argument isKindOfClass:[NSString class]]) 291 arguments.append(argument); 292 } 293 } 294 } 295 296 if (PluginProcess::shared().launchApplicationAtURL(KURL(url).string(), arguments)) { 297 if (error) 298 *error = nil; 299 return nil; 300 } 301 302 return NSWorkspace_launchApplicationAtURL_options_configuration_error(self, _cmd, url, options, configuration, error); 303 } 304 282 305 static void initializeCocoaOverrides() 283 306 { 284 307 // Override -[NSConcreteTask launch:] 285 308 Method launchMethod = class_getInstanceMethod(objc_getClass("NSConcreteTask"), @selector(launch)); 286 287 309 NSConcreteTask_launch = method_setImplementation(launchMethod, reinterpret_cast<IMP>(replacedNSConcreteTask_launch)); 310 311 // Override -[NSWorkspace launchApplicationAtURL:options:configuration:error:] 312 Method launchApplicationAtURLOptionsConfigurationErrorMethod = class_getInstanceMethod(objc_getClass("NSWorkspace"), @selector(launchApplicationAtURL:options:configuration:error:)); 313 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))); 288 314 289 315 // Override -[NSApplication runModalForWindow:] … … 328 354 } 329 355 356 bool PluginProcess::launchApplicationAtURL(const String& urlString, const Vector<String>& arguments) 357 { 358 bool result = false; 359 if (!parentProcessConnection()->sendSync(Messages::PluginProcessProxy::LaunchApplicationAtURL(urlString, arguments), Messages::PluginProcessProxy::LaunchProcess::Reply(result), 0)) 360 return false; 361 362 return result; 363 } 364 330 365 bool PluginProcess::openURL(const String& urlString, int32_t& status, String& launchedURLString) 331 366 { -
trunk/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.h
r151748 r152182 137 137 void openPluginPreferencePane(); 138 138 void launchProcess(const String& launchPath, const Vector<String>& arguments, bool& result); 139 void launchApplicationAtURL(const String& urlString, const Vector<String>& arguments, bool& result); 139 140 void openURL(const String& url, bool& result, int32_t& status, String& launchedURLString); 140 141 #endif -
trunk/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.messages.in
r151748 r152182 39 39 LaunchProcess(WTF::String launchPath, Vector<WTF::String> arguments) -> (bool result) 40 40 41 # Returns true if the UI process launched the application. 42 LaunchApplicationAtURL(WTF::String url, Vector<WTF::String> arguments) -> (bool result) 43 41 44 # Returns true if the UI process did open the URL. 42 45 OpenURL(WTF::String urlString) -> (bool result, int32_t status, WTF::String launchedURLString) -
trunk/Source/WebKit2/UIProcess/Plugins/mac/PluginProcessProxyMac.mm
r151748 r152182 398 398 } 399 399 400 static bool isJavaUpdaterURL(const PluginProcessAttributes& pluginProcessAttributes, const String& urlString) 401 { 402 NSURL *javaUpdaterURL = [NSURL fileURLWithPathComponents:[NSArray arrayWithObjects:(NSString *)pluginProcessAttributes.moduleInfo.path, @"Contents/Resources/Java Updater.app", nil]]; 403 404 return [[NSURL URLWithString:urlString] isEqual:javaUpdaterURL]; 405 } 406 407 static bool shouldLaunchApplicationAtURL(const PluginProcessAttributes& pluginProcessAttributes, const String& urlString) 408 { 409 if (pluginProcessAttributes.moduleInfo.bundleIdentifier == "com.oracle.java.JavaAppletPlugin") 410 return isJavaUpdaterURL(pluginProcessAttributes, urlString); 411 412 return false; 413 } 414 415 void PluginProcessProxy::launchApplicationAtURL(const String& urlString, const Vector<String>& arguments, bool& result) 416 { 417 if (!shouldLaunchApplicationAtURL(m_pluginProcessAttributes, urlString)) { 418 result = false; 419 return; 420 } 421 422 result = true; 423 424 RetainPtr<NSMutableArray> argumentsArray = adoptNS([[NSMutableArray alloc] initWithCapacity:arguments.size()]); 425 for (size_t i = 0; i < arguments.size(); ++i) 426 [argumentsArray addObject:(NSString *)arguments[i]]; 427 428 NSDictionary *configuration = [NSDictionary dictionaryWithObject:argumentsArray.get() forKey:NSWorkspaceLaunchConfigurationArguments]; 429 [[NSWorkspace sharedWorkspace] launchApplicationAtURL:[NSURL URLWithString:urlString] options:NSWorkspaceLaunchAsync configuration:configuration error:nullptr]; 430 } 431 400 432 static bool isSilverlightPreferencesURL(const PluginProcessAttributes& pluginProcessAttributes, const String& urlString) 401 433 {
Note: See TracChangeset
for help on using the changeset viewer.