blob: 6131b452fd9bfc7d11b9c69132d12a338472bbf9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
// Copyright (c) 2009 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/logging.h"
#include "webkit/glue/plugins/carbon_plugin_window_tracker_mac.h"
CarbonPluginWindowTracker::CarbonPluginWindowTracker() {
}
CarbonPluginWindowTracker* CarbonPluginWindowTracker::SharedInstance() {
static CarbonPluginWindowTracker* tracker = new CarbonPluginWindowTracker();
return tracker;
}
WindowRef CarbonPluginWindowTracker::CreateDummyWindowForDelegate(
WebPluginDelegateImpl* delegate) {
// The real size will be set by the plugin instance, once that size is known.
Rect window_bounds = { 0, 0, 100, 100 };
WindowRef new_ref = NULL;
if (CreateNewWindow(kDocumentWindowClass,
kWindowNoTitleBarAttribute,
&window_bounds,
&new_ref) == noErr) {
window_to_delegate_map_[new_ref] = delegate;
delegate_to_window_map_[delegate] = new_ref;
}
return new_ref;
}
WebPluginDelegateImpl* CarbonPluginWindowTracker::GetDelegateForDummyWindow(
WindowRef window) const {
WindowToDelegateMap::const_iterator i = window_to_delegate_map_.find(window);
if (i != window_to_delegate_map_.end())
return i->second;
return NULL;
}
WindowRef CarbonPluginWindowTracker::GetDummyWindowForDelegate(
WebPluginDelegateImpl* delegate) const {
DelegateToWindowMap::const_iterator i =
delegate_to_window_map_.find(delegate);
if (i != delegate_to_window_map_.end())
return i->second;
return NULL;
}
void CarbonPluginWindowTracker::DestroyDummyWindowForDelegate(
WebPluginDelegateImpl* delegate, WindowRef window) {
DCHECK(GetDelegateForDummyWindow(window) == delegate);
window_to_delegate_map_.erase(window);
delegate_to_window_map_.erase(delegate);
if (window) // Check just in case the initial window creation failed.
DisposeWindow(window);
}
|