| /* | |
| * 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" | |
| @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"]; | |
| } | |
| 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 |