diff options
Diffstat (limited to 'WebKit/mac/Plugins/WebPluginController.mm')
-rw-r--r-- | WebKit/mac/Plugins/WebPluginController.mm | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/WebKit/mac/Plugins/WebPluginController.mm b/WebKit/mac/Plugins/WebPluginController.mm index 1c85862..9c037c2 100644 --- a/WebKit/mac/Plugins/WebPluginController.mm +++ b/WebKit/mac/Plugins/WebPluginController.mm @@ -138,6 +138,9 @@ static NSMutableSet *pluginViews = nil; { [_views release]; [_checksInProgress release]; +#if ENABLE(PLUGIN_PROXY_FOR_VIDEO) + [_viewsNotInDocument release]; +#endif [super dealloc]; } @@ -198,9 +201,30 @@ static NSMutableSet *pluginViews = nil; for (i = 0; i < count; i++) [self stopOnePlugin:[_views objectAtIndex:i]]; +#if ENABLE(PLUGIN_PROXY_FOR_VIDEO) + count = [_viewsNotInDocument count]; + for (i = 0; i < count; i++) + [self stopOnePlugin:[_viewsNotInDocument objectAtIndex:i]]; +#endif + _started = NO; } +#if ENABLE(PLUGIN_PROXY_FOR_VIDEO) +- (void)pluginViewCreated:(NSView *)view +{ + if (!_viewsNotInDocument) + _viewsNotInDocument= [[NSMutableArray alloc] init]; + if (![_viewsNotInDocument containsObject:view]) + [_viewsNotInDocument addObject:view]; +} + ++ (void)pluginViewHidden:(NSView *)view +{ + [pluginViews removeObject:view]; +} +#endif + - (void)addPlugin:(NSView *)view { if (!_documentView) { @@ -212,6 +236,11 @@ static NSMutableSet *pluginViews = nil; [_views addObject:view]; [[_documentView _webView] addPluginInstanceView:view]; +#if ENABLE(PLUGIN_PROXY_FOR_VIDEO) + if ([_viewsNotInDocument containsObject:view]) + [_viewsNotInDocument removeObject:view]; +#endif + BOOL oldDefersCallbacks = [[self webView] defersCallbacks]; if (!oldDefersCallbacks) [[self webView] setDefersCallbacks:YES]; @@ -251,7 +280,11 @@ static NSMutableSet *pluginViews = nil; - (void)destroyPlugin:(NSView *)view { +#if ENABLE(PLUGIN_PROXY_FOR_VIDEO) + if ([_views containsObject:view] || [_viewsNotInDocument containsObject:view]) { +#else if ([_views containsObject:view]) { +#endif if (_started) [self stopOnePlugin:view]; [self destroyOnePlugin:view]; @@ -264,6 +297,9 @@ static NSMutableSet *pluginViews = nil; [pluginViews removeObject:view]; [[_documentView _webView] removePluginInstanceView:view]; [_views removeObject:view]; +#if ENABLE(PLUGIN_PROXY_FOR_VIDEO) + [_viewsNotInDocument removeObject:view]; +#endif } } @@ -310,6 +346,13 @@ static void cancelOutstandingCheck(const void *item, void *context) [pluginViews removeObject:aView]; [[_documentView _webView] removePluginInstanceView:aView]; } + +#if ENABLE(PLUGIN_PROXY_FOR_VIDEO) + count = [_viewsNotInDocument count]; + for (i = 0; i < count; i++) + [self destroyOnePlugin:[_viewsNotInDocument objectAtIndex:i]]; +#endif + [_views makeObjectsPerformSelector:@selector(removeFromSuperviewWithoutNeedingDisplay)]; [_views release]; _views = nil; |