summaryrefslogtreecommitdiffstats
path: root/webkit/glue/plugins/carbon_plugin_window_tracker_mac.cc
blob: c4ae72d931a02c5f4f013cf057341351a987d93c (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(
    OpaquePluginRef 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;
}

OpaquePluginRef 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(
    OpaquePluginRef 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(
    OpaquePluginRef 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);
}