| /* | |
| * Copyright 2008 Google Inc. | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); you may not | |
| * use this file except in compliance with the License. You may obtain a copy of | |
| * the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | |
| * License for the specific language governing permissions and limitations under | |
| * the License. | |
| */ | |
| #import "OophmPlugin.h" | |
| #import "OophmWebScriptObject.h" | |
| #import "SlowScriptProxy.h" | |
| @interface OophmPlugin (Private) | |
| /* Tell GoogleSoftwareUpdate the plugin is being used */ | |
| - (void)recordActive; | |
| @end | |
| @implementation OophmPlugin | |
| + (NSView *)plugInViewWithArguments:(NSDictionary *)arguments { | |
| return [[[OophmPlugin alloc] initWithArguments: arguments] autorelease]; | |
| } | |
| - (void)dealloc { | |
| Debug::log(Debug::Info) << "Plugin deallocated" << Debug::flush; | |
| [super dealloc]; | |
| } | |
| - (id)initWithArguments:(NSDictionary *)arguments { | |
| Debug::log(Debug::Info) << "Plugin starting" << Debug::flush; | |
| self = [super initWithFrame: NSZeroRect]; | |
| if (!self) { | |
| return nil; | |
| } | |
| id container = [[arguments objectForKey:WebPlugInContainerKey] retain]; | |
| WebFrame* frame = [container webFrame]; | |
| JSGlobalContextRef contextRef = [frame globalContext]; | |
| _scriptObject = [[OophmWebScriptObject scriptObjectWithContext:contextRef withWebView:[frame webView]] retain]; | |
| /* | |
| * Install a proxy to prevent slow script warnings from being shown by hijacking | |
| * the message sent to the original UIDelegate. We could also use this to prevent | |
| * window.alert and window.prompt from blocking test code. | |
| */ | |
| WebView* view = [frame webView]; | |
| _slowScriptProxy = [[SlowScriptProxy alloc] initWithWebView: view]; | |
| if ([_slowScriptProxy respondsToSelector:@selector(webView:setStatusText:)]) { | |
| [_slowScriptProxy webView:view setStatusText:@"GWT Developer Plugin Active"]; | |
| } | |
| [self recordActive]; | |
| return self; | |
| } | |
| - (id)objectForWebScript { | |
| return _scriptObject; | |
| } | |
| - (void)webPlugInDestroy { | |
| Debug::log(Debug::Info) << "Destroying plugin" << Debug::flush; | |
| [_scriptObject release]; | |
| _scriptObject = nil; | |
| if ([_slowScriptProxy respondsToSelector:@selector(webView:setStatusText:)]) { | |
| [_slowScriptProxy webView:[_slowScriptProxy webView] | |
| setStatusText:@"GWT OOPHM Session Ended"]; | |
| } | |
| [_slowScriptProxy release]; | |
| _slowScriptProxy = nil; | |
| } | |
| @end | |
| @implementation OophmPlugin (Private) | |
| // Touch a file in ~/Library/Google/GoogleSoftwareUpdate/Actives | |
| - (void)recordActive { | |
| NSFileManager* manager = [[NSFileManager alloc] init]; | |
| [manager autorelease]; | |
| NSError* error = NULL; | |
| NSString* activesDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Google/GoogleSoftwareUpdate/Actives"]; | |
| Debug::log(Debug::Info) << "Ensuring directory " << [activesDirectory UTF8String] << Debug::flush; | |
| if (![manager createDirectoryAtPath:activesDirectory withIntermediateDirectories:YES attributes:nil error:&error]) { | |
| Debug::log(Debug::Error) << "Unable to create actives directory " << [activesDirectory UTF8String] << | |
| ": " << [[error localizedDescription] UTF8String] << Debug::flush; | |
| return; | |
| } | |
| // Add the product id | |
| NSString* file = [activesDirectory stringByAppendingPathComponent:@"com.google.gwt.dev.plugin.safari"]; | |
| // Create an empty file using an empty NSData object | |
| if (![manager createFileAtPath:file contents:[NSData data] attributes:nil]) { | |
| Debug::log(Debug::Error) << "Unable to create actives file" << Debug::flush; | |
| return; | |
| } | |
| Debug::log(Debug::Info) << "Created actives file " << [file UTF8String] << Debug::flush; | |
| } | |
| @end |