Fix the build.
[WebKit-https.git] / Source / WebKit2 / Platform / mac / LayerHostingContext.mm
1 /*
2  * Copyright (C) 2012 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #import "config.h"
27 #import "LayerHostingContext.h"
28
29 #import <WebCore/MachSendRight.h>
30 #import <WebCore/QuartzCoreSPI.h>
31 #import <WebKitSystemInterface.h>
32
33 using namespace WebCore;
34
35 namespace WebKit {
36
37 std::unique_ptr<LayerHostingContext> LayerHostingContext::createForPort(const MachSendRight& serverPort)
38 {
39     auto layerHostingContext = std::make_unique<LayerHostingContext>();
40
41     layerHostingContext->m_layerHostingMode = LayerHostingMode::InProcess;
42     layerHostingContext->m_context = (CAContext *)WKCAContextMakeRemoteWithServerPort(serverPort.sendRight());
43
44     return layerHostingContext;
45 }
46
47 #if HAVE(OUT_OF_PROCESS_LAYER_HOSTING)
48 std::unique_ptr<LayerHostingContext> LayerHostingContext::createForExternalHostingProcess()
49 {
50     auto layerHostingContext = std::make_unique<LayerHostingContext>();
51     layerHostingContext->m_layerHostingMode = LayerHostingMode::OutOfProcess;
52
53 #if PLATFORM(IOS)
54     // Use a very large display ID to ensure that the context is never put on-screen 
55     // without being explicitly parented. See <rdar://problem/16089267> for details.
56     layerHostingContext->m_context = [CAContext remoteContextWithOptions:@{
57         kCAContextIgnoresHitTest : @YES,
58         kCAContextDisplayId : @10000 }];
59 #else
60     layerHostingContext->m_context = (CAContext *)WKCAContextMakeRemoteForWindowServer();
61 #endif
62     
63     return layerHostingContext;
64 }
65 #endif
66
67 LayerHostingContext::LayerHostingContext()
68 {
69 }
70
71 LayerHostingContext::~LayerHostingContext()
72 {
73 }
74
75 void LayerHostingContext::setRootLayer(CALayer *rootLayer)
76 {
77     [m_context setLayer:rootLayer];
78 }
79
80 CALayer *LayerHostingContext::rootLayer() const
81 {
82     return [m_context layer];
83 }
84
85 uint32_t LayerHostingContext::contextID() const
86 {
87     return [m_context contextId];
88 }
89
90 void LayerHostingContext::invalidate()
91 {
92     [m_context invalidate];
93 }
94
95 void LayerHostingContext::setColorSpace(CGColorSpaceRef colorSpace)
96 {
97     [m_context setColorSpace:colorSpace];
98 }
99
100 CGColorSpaceRef LayerHostingContext::colorSpace() const
101 {
102     return [m_context colorSpace];
103 }
104
105 #if PLATFORM(IOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= 101000
106 void LayerHostingContext::setFencePort(mach_port_t fencePort)
107 {
108     [m_context setFencePort:fencePort];
109 }
110
111 MachSendRight LayerHostingContext::createFencePort()
112 {
113     return MachSendRight::adopt([m_context createFencePort]);
114 }
115 #else
116 NO_RETURN_DUE_TO_ASSERT void LayerHostingContext::setFencePort(mach_port_t fencePort)
117 {
118     ASSERT_NOT_REACHED();
119 }
120
121 NO_RETURN_DUE_TO_ASSERT MachSendRight LayerHostingContext::createFencePort()
122 {
123     ASSERT_NOT_REACHED();
124 }
125 #endif
126
127 } // namespace WebKit