summaryrefslogtreecommitdiffstats
path: root/WebKit/mac/Plugins/WebPluginController.mm
diff options
context:
space:
mode:
Diffstat (limited to 'WebKit/mac/Plugins/WebPluginController.mm')
-rw-r--r--WebKit/mac/Plugins/WebPluginController.mm43
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;