Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / renderer_host / pepper / monitor_finder_mac.mm
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/renderer_host/pepper/monitor_finder_mac.h"
6
7 #import <Cocoa/Cocoa.h>
8
9 #include "content/public/browser/browser_thread.h"
10 #include "content/public/browser/render_frame_host.h"
11
12 namespace chrome {
13
14 MonitorFinder::MonitorFinder(int process_id, int render_frame_id)
15     : process_id_(process_id),
16       render_frame_id_(render_frame_id),
17       request_sent_(false),
18       display_id_(kCGNullDirectDisplay) {}
19
20 MonitorFinder::~MonitorFinder() {}
21
22 int64_t MonitorFinder::GetMonitor() {
23   {
24     // The plugin may call this method several times, so avoid spamming the UI
25     // thread with requests by only allowing one outstanding request at a time.
26     base::AutoLock lock(mutex_);
27     if (request_sent_)
28       return display_id_;
29     request_sent_ = true;
30   }
31
32   content::BrowserThread::PostTask(
33       content::BrowserThread::UI,
34       FROM_HERE,
35       base::Bind(&MonitorFinder::FetchMonitorFromWidget, this));
36   return display_id_;
37 }
38
39 // static
40 bool MonitorFinder::IsMonitorBuiltIn(int64_t display_id) {
41   return CGDisplayIsBuiltin(display_id);
42 }
43
44 void MonitorFinder::FetchMonitorFromWidget() {
45   DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
46   content::RenderFrameHost* rfh =
47       content::RenderFrameHost::FromID(process_id_, render_frame_id_);
48   if (!rfh)
49     return;
50
51   gfx::NativeView native_view = rfh->GetNativeView();
52   NSWindow* window = [native_view window];
53   NSScreen* screen = [window screen];
54   CGDirectDisplayID display_id =
55       [[[screen deviceDescription] objectForKey:@"NSScreenNumber"] intValue];
56
57   base::AutoLock lock(mutex_);
58   request_sent_ = false;
59   display_id_ = display_id;
60 }
61
62 }  // namespace chrome