Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / ui / base / cocoa / remote_layer_api.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 "ui/base/cocoa/remote_layer_api.h"
6
7 #include "base/command_line.h"
8 #include "base/mac/mac_util.h"
9 #include "ui/base/ui_base_switches.h"
10
11 #include <objc/runtime.h>
12
13 namespace ui {
14
15 bool RemoteLayerAPISupported() {
16   // This API only works on Mac OS 10.9 and later.
17   if (!base::mac::IsOSMavericksOrLater())
18     return false;
19
20   bool disabled_at_command_line =
21       CommandLine::ForCurrentProcess()->HasSwitch(
22           switches::kDisableRemoteCoreAnimation);
23   if (disabled_at_command_line)
24     return false;
25
26   // Verify the GPU process interfaces are present.
27   static Class caContextClass = NSClassFromString(@"CAContext");
28   if (!caContextClass)
29     return false;
30
31   // Note that because the contextId and layer properties are dynamic,
32   // instancesRespondToSelector will return NO for them.
33   static bool caContextClassValid =
34       [caContextClass respondsToSelector:
35           @selector(contextWithCGSConnection:options:)] &&
36       class_getProperty(caContextClass, "contextId") &&
37       class_getProperty(caContextClass, "layer");
38   if (!caContextClassValid)
39     return false;
40
41   // Verify the browser process interfaces are present.
42   static Class caLayerHostClass = NSClassFromString(@"CALayerHost");
43   if (!caLayerHostClass)
44     return false;
45
46   static bool caLayerHostClassValid =
47       [caLayerHostClass instancesRespondToSelector:@selector(contextId)] &&
48       [caLayerHostClass instancesRespondToSelector:@selector(setContextId:)];
49   if (!caLayerHostClassValid)
50     return false;
51
52   // If everything is there, we should be able to use the API.
53   return true;
54 }
55
56 }  // namespace
57