d0e868b81982b9ddcc00661169b97f213723479b
[WebKit-https.git] / Source / WebKit2 / UIProcess / API / Cocoa / WKURLSchemeHandlerTask.mm
1 /*
2  * Copyright (C) 2017 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 "WKURLSchemeHandlerTaskInternal.h"
28
29 #if WK_API_ENABLED
30
31 #include "WebURLSchemeHandlerTask.h"
32 #include <WebCore/ResourceError.h>
33 #include <WebCore/ResourceResponse.h>
34 #include <WebCore/SharedBuffer.h>
35
36 using namespace WebCore;
37
38 static void raiseExceptionIfNecessary(WebKit::WebURLSchemeHandlerTask::ExceptionType exceptionType)
39 {
40     switch (exceptionType) {
41     case WebKit::WebURLSchemeHandlerTask::ExceptionType::None:
42         return;
43     case WebKit::WebURLSchemeHandlerTask::ExceptionType::TaskAlreadyStopped:
44         [NSException raise:NSInternalInconsistencyException format:@"This task has already been stopped"];
45         break;
46     case WebKit::WebURLSchemeHandlerTask::ExceptionType::CompleteAlreadyCalled:
47         [NSException raise:NSInternalInconsistencyException format:@"[WKURLSchemeHandlerTask taskDidCompleteWithError:] has already been called for this task"];
48         break;
49     case WebKit::WebURLSchemeHandlerTask::ExceptionType::DataAlreadySent:
50         [NSException raise:NSInternalInconsistencyException format:@"[WKURLSchemeHandlerTask taskDidReceiveData:] has already been called for this task"];
51         break;
52     case WebKit::WebURLSchemeHandlerTask::ExceptionType::NoResponseSent:
53         [NSException raise:NSInternalInconsistencyException format:@"No response has been sent for this task"];
54         break;
55     }
56 }
57
58 @implementation WKURLSchemeHandlerTaskImpl
59
60 - (NSURLRequest *)request
61 {
62     return _urlSchemeHandlerTask->task().request().nsURLRequest(DoNotUpdateHTTPBody);
63 }
64
65 - (void)didReceiveResponse:(NSURLResponse *)response
66 {
67     auto result = _urlSchemeHandlerTask->task().didReceiveResponse(response);
68     raiseExceptionIfNecessary(result);
69 }
70
71 - (void)didReceiveData:(NSData *)data
72 {
73     auto result = _urlSchemeHandlerTask->task().didReceiveData(WebCore::SharedBuffer::wrapNSData(data));
74     raiseExceptionIfNecessary(result);
75 }
76
77 - (void)didFinish
78 {
79     auto result = _urlSchemeHandlerTask->task().didComplete({ });
80     raiseExceptionIfNecessary(result);
81 }
82
83 - (void)didFailWithError:(NSError *)error
84 {
85     auto result = _urlSchemeHandlerTask->task().didComplete(error);
86     raiseExceptionIfNecessary(result);
87 }
88
89 #pragma mark WKObject protocol implementation
90
91 - (API::Object&)_apiObject
92 {
93     return *_urlSchemeHandlerTask;
94 }
95
96 @end
97
98 #endif // #if WK_API_ENABLED