blob: b4c3338191898d8bc9f58c1841cf03657fe46c32 [file] [log] [blame]
/*
* 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