1 /* 2 * Copyright (c) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 /** 17 * @addtogroup Web 18 * @{ 19 * 20 * @brief Provides APIs to intercept the request from ArkWeb. 21 * @since 12 22 */ 23 /** 24 * @file arkweb_scheme_handler.h 25 * 26 * @brief Declares the APIs to intercept the request from ArkWeb. 27 * @kit ArkWeb 28 * @library libohweb.so 29 * @syscap SystemCapability.Web.Webview.Core 30 * @since 12 31 */ 32 #ifndef ARKWEB_SCHEME_HANDLER_H 33 #define ARKWEB_SCHEME_HANDLER_H 34 35 #include <stdbool.h> 36 #include "stdint.h" 37 38 #include "arkweb_error_code.h" 39 #include "arkweb_net_error_list.h" 40 41 #ifdef __cplusplus 42 extern "C" { 43 #endif 44 45 /** 46 * @brief Configuration information for custom schemes. 47 * 48 * @syscap SystemCapability.Web.Webview.Core 49 * @since 12 50 */ 51 typedef enum ArkWeb_CustomSchemeOption { 52 OH_ARKWEB_SCHEME_OPTION_NONE = 0, 53 54 /** If ARKWEB_SCHEME_OPTION_STANDARD is set, the scheme will be handled as a standard scheme. The standard 55 * schemes need to comply with the URL normalization and parsing rules defined in Section 3.1 of RFC 1738, 56 * which can be found in the http://www.ietf.org/rfc/rfc1738.txt. 57 */ 58 ARKWEB_SCHEME_OPTION_STANDARD = 1 << 0, 59 60 /** If ARKWEB_SCHEME_OPTION_LOCAL is set, the same security rules as those applied to the "file" URL will be 61 * used to handle the scheme. 62 */ 63 ARKWEB_SCHEME_OPTION_LOCAL = 1 << 1, 64 65 /** If ARKWEB_SCHEME_OPTION_DISPLAY_ISOLATED is set, then the scheme can only be displayed from other content 66 * hosted using the same scheme. 67 */ 68 ARKWEB_SCHEME_OPTION_DISPLAY_ISOLATED = 1 << 2, 69 70 /** If ARKWEB_SCHEME_OPTION_SECURE is set, the same security rules as those applied to the "https" URL will be 71 * used to handle the scheme. 72 */ 73 ARKWEB_SCHEME_OPTION_SECURE = 1 << 3, 74 75 /** If ARKWEB_SCHEME_OPTION_CORS_ENABLED is set, then the scheme can be sent CORS requests. In most cases this 76 * value should be set when ARKWEB_SCHEME_OPTION_STANDARD is set. 77 */ 78 ARKWEB_SCHEME_OPTION_CORS_ENABLED = 1 << 4, 79 80 /** If ARKWEB_SCHEME_OPTION_CSP_BYPASSING is set, then this scheme can bypass Content Security Policy (CSP) 81 * checks. In most cases, this value should not be set when ARKWEB_SCHEME_OPTION_STANDARD is set. 82 */ 83 ARKWEB_SCHEME_OPTION_CSP_BYPASSING = 1 << 5, 84 85 /** If ARKWEB_SCHEME_OPTION_FETCH_ENABLED is set, then this scheme can perform FETCH API requests. */ 86 ARKWEB_SCHEME_OPTION_FETCH_ENABLED = 1 << 6, 87 88 /** If ARKWEB_SCHEME_OPTION_CODE_CACHE_ENABLED is set, then the js of this scheme can generate code cache. */ 89 ARKWEB_SCHEME_OPTION_CODE_CACHE_ENABLED = 1 << 7, 90 } ArkWeb_CustomSchemeOption; 91 92 /** 93 * @brief Resource type for a request. 94 * 95 * These constants match their equivalents in Chromium's ResourceType and should not be renumbered.\n 96 * 97 * @syscap SystemCapability.Web.Webview.Core 98 * @since 12 99 */ 100 typedef enum ArkWeb_ResourceType { 101 /** Top level page. */ 102 MAIN_FRAME = 0, 103 104 /** Frame or Iframe. */ 105 SUB_FRAME = 1, 106 107 /** CSS stylesheet. */ 108 STYLE_SHEET = 2, 109 110 /** External script. */ 111 SCRIPT = 3, 112 113 /** Image(jpg/gif/png/etc). */ 114 IMAGE = 4, 115 116 /** Font. */ 117 FONT_RESOURCE = 5, 118 119 /** Some other subresource. This is the default type if the actual type is unknown. */ 120 SUB_RESOURCE = 6, 121 122 /** Object (or embed) tag for a plugin, or a resource that a plugin requested. */ 123 OBJECT = 7, 124 125 /** Media resource. */ 126 MEDIA = 8, 127 128 /** Main resource of a dedicated worker. */ 129 WORKER = 9, 130 131 /** Main resource of a shared worker. */ 132 SHARED_WORKER = 10, 133 134 /** Explicitly requested prefetch. */ 135 PREFETCH = 11, 136 137 /** Favicon. */ 138 FAVICON = 12, 139 140 /** XMLHttpRequest. */ 141 XHR = 13, 142 143 /** Ping request for <a ping>/sendBeacon. */ 144 PING = 14, 145 146 /** The main resource of a service worker. */ 147 SERVICE_WORKER = 15, 148 149 /** Report of Content Security Policy violations. */ 150 CSP_REPORT = 16, 151 152 /** Resource that a plugin requested. */ 153 PLUGIN_RESOURCE = 17, 154 155 /** A main-frame service worker navigation preload request. */ 156 NAVIGATION_PRELOAD_MAIN_FRAME = 19, 157 158 /** A sub-frame service worker navigation preload request. */ 159 NAVIGATION_PRELOAD_SUB_FRAME = 20, 160 } ArkWeb_ResourceType; 161 162 /** 163 * @brief This class is used to intercept requests for a specified scheme. 164 * 165 * @syscap SystemCapability.Web.Webview.Core 166 * @since 12 167 */ 168 typedef struct ArkWeb_SchemeHandler_ ArkWeb_SchemeHandler; 169 170 /** 171 * @brief Used to intercept url requests. 172 * 173 * Response headers and body can be sent through ArkWeb_ResourceHandler.\n 174 * 175 * @syscap SystemCapability.Web.Webview.Core 176 * @since 12 177 */ 178 typedef struct ArkWeb_ResourceHandler_ ArkWeb_ResourceHandler; 179 180 /** 181 * @brief The response of the intercepted request. 182 * 183 * @syscap SystemCapability.Web.Webview.Core 184 * @since 12 185 */ 186 typedef struct ArkWeb_Response_ ArkWeb_Response; 187 188 /** 189 * @brief The info of the request. 190 * 191 * You can obtain the requested URL, method, post data, and other information through OH_ArkWeb_ResourceRequest.\n 192 * 193 * @syscap SystemCapability.Web.Webview.Core 194 * @since 12 195 */ 196 typedef struct ArkWeb_ResourceRequest_ ArkWeb_ResourceRequest; 197 198 /** 199 * @brief The request headers of the request. 200 * 201 * @syscap SystemCapability.Web.Webview.Core 202 * @since 12 203 */ 204 typedef struct ArkWeb_RequestHeaderList_ ArkWeb_RequestHeaderList; 205 206 /** 207 * @brief The http body of the request. 208 * 209 * Use OH_ArkWebHttpBodyStream_* interface to read the body.\n 210 * 211 * @syscap SystemCapability.Web.Webview.Core 212 * @since 12 213 */ 214 typedef struct ArkWeb_HttpBodyStream_ ArkWeb_HttpBodyStream; 215 216 217 /** 218 * @brief Callback for handling the request. 219 * 220 * This will be called on the IO thread.\n 221 * 222 * @param schemeHandler The ArkWeb_SchemeHandler. 223 * @param resourceRequest Obtain request's information through this. 224 * @param resourceHandler The ArkWeb_ResourceHandler for the request. It should not be used if intercept is set to 225 * false. 226 * @param intercept If true will intercept the request, if false otherwise. 227 * 228 * @syscap SystemCapability.Web.Webview.Core 229 * @since 12 230 */ 231 typedef void (*ArkWeb_OnRequestStart)(const ArkWeb_SchemeHandler* schemeHandler, 232 ArkWeb_ResourceRequest* resourceRequest, 233 const ArkWeb_ResourceHandler* resourceHandler, 234 bool* intercept); 235 236 /** 237 * @brief Callback when the request is completed. 238 * 239 * This will be called on the IO thread.\n 240 * Should destory the resourceRequest by ArkWeb_ResourceRequest_Destroy and use ArkWeb_ResourceHandler_Destroy\n 241 * destroy the ArkWeb_ResourceHandler received in ArkWeb_OnRequestStart.\n 242 * 243 * @param schemeHandler The ArkWeb_SchemeHandler. 244 * @param resourceRequest The ArkWeb_ResourceRequest. 245 * 246 * @syscap SystemCapability.Web.Webview.Core 247 * @since 12 248 */ 249 typedef void (*ArkWeb_OnRequestStop)(const ArkWeb_SchemeHandler* schemeHandler, 250 const ArkWeb_ResourceRequest* resourceRequest); 251 252 /** 253 * @brief Callback when the read operation done. 254 * @param httpBodyStream The ArkWeb_HttpBodyStream. 255 * @param buffer The buffer to receive data. 256 * @param bytesRead Callback after OH_ArkWebHttpBodyStream_Read. bytesRead greater than 0 means that the buffer is 257 * filled with data of bytesRead size. Caller can read from the buffer, and if 258 * OH_ArkWebHttpBodyStream_IsEOF is false, caller can continue to read the remaining data. 259 * 260 * @syscap SystemCapability.Web.Webview.Core 261 * @since 12 262 */ 263 typedef void (*ArkWeb_HttpBodyStreamReadCallback)(const ArkWeb_HttpBodyStream* httpBodyStream, 264 uint8_t* buffer, 265 int bytesRead); 266 267 /** 268 * @brief Callback when the init operation done. 269 * @param httpBodyStream The ArkWeb_HttpBodyStream. 270 * @param result {@link ARKWEB_NET_OK} on success otherwise refer to arkweb_net_error_list.h. 271 * 272 * @syscap SystemCapability.Web.Webview.Core 273 * @since 12 274 */ 275 typedef void (*ArkWeb_HttpBodyStreamInitCallback)(const ArkWeb_HttpBodyStream* httpBodyStream, ArkWeb_NetError result); 276 277 /** 278 * @brief Destroy the ArkWeb_RequestHeaderList. 279 * @param requestHeaderList The ArkWeb_RequestHeaderList to be destroyed. 280 * 281 * @syscap SystemCapability.Web.Webview.Core 282 * @since 12 283 */ 284 void OH_ArkWebRequestHeaderList_Destroy(ArkWeb_RequestHeaderList* requestHeaderList); 285 286 /** 287 * @brief Get the request headers size. 288 * @param requestHeaderList The list of request header. 289 * @return The size of request headers. -1 if requestHeaderList is invalid. 290 * 291 * @syscap SystemCapability.Web.Webview.Core 292 * @since 12 293 */ 294 int32_t OH_ArkWebRequestHeaderList_GetSize(const ArkWeb_RequestHeaderList* requestHeaderList); 295 296 /** 297 * @brief Get the specified request header. 298 * @param requestHeaderList The list of request header. 299 * @param index The index of request header. 300 * @param key The header key. Caller must release the string by OH_ArkWeb_ReleaseString. 301 * @param value The header value. Caller must release the string by OH_ArkWeb_ReleaseString. 302 * 303 * @syscap SystemCapability.Web.Webview.Core 304 * @since 12 305 */ 306 void OH_ArkWebRequestHeaderList_GetHeader(const ArkWeb_RequestHeaderList* requestHeaderList, 307 int32_t index, 308 char** key, 309 char** value); 310 311 /** 312 * @brief Set a user data to ArkWeb_ResourceRequest. 313 * @param resourceRequest The ArkWeb_ResourceRequest. 314 * @param userData The user data to set. 315 * @return {@link ARKWEB_NET_OK} 0 - Success. 316 * {@link ARKWEB_INVALID_PARAM} 17100101 - Invalid param. 317 * 318 * @syscap SystemCapability.Web.Webview.Core 319 * @since 12 320 */ 321 int32_t OH_ArkWebResourceRequest_SetUserData(ArkWeb_ResourceRequest* resourceRequest, void* userData); 322 323 /** 324 * @brief Get the user data from ArkWeb_ResourceRequest. 325 * @param resourceRequest The ArkWeb_ResourceRequest. 326 * @return The set user data. 327 * 328 * @syscap SystemCapability.Web.Webview.Core 329 * @since 12 330 */ 331 void* OH_ArkWebResourceRequest_GetUserData(const ArkWeb_ResourceRequest* resourceRequest); 332 333 /** 334 * @brief Get the method of request. 335 * @param resourceRequest The ArkWeb_ResourceRequest. 336 * @param method The request's http method. This function will allocate memory for the method string and caller must 337 * release the string by OH_ArkWeb_ReleaseString. 338 * 339 * @syscap SystemCapability.Web.Webview.Core 340 * @since 12 341 */ 342 void OH_ArkWebResourceRequest_GetMethod(const ArkWeb_ResourceRequest* resourceRequest, char** method); 343 344 /** 345 * @brief Get the url of request. 346 * @param resourceRequest The ArkWeb_ResourceRequest. 347 * @param url The request's url. This function will allocate memory for the url string and caller must release the 348 * string by OH_ArkWeb_ReleaseString. 349 * 350 * @syscap SystemCapability.Web.Webview.Core 351 * @since 12 352 */ 353 void OH_ArkWebResourceRequest_GetUrl(const ArkWeb_ResourceRequest* resourceRequest, char** url); 354 355 /** 356 * @brief Create a ArkWeb_HttpBodyStream which used to read the http body. 357 * @param resourceRequest The ArkWeb_ResourceRequest. 358 * @param httpBodyStream The request's http body. This function will allocate memory for the http body stream and 359 * caller must release the httpBodyStream by OH_ArkWebResourceRequest_DestroyHttpBodyStream. 360 * 361 * @syscap SystemCapability.Web.Webview.Core 362 * @since 12 363 */ 364 void OH_ArkWebResourceRequest_GetHttpBodyStream(const ArkWeb_ResourceRequest* resourceRequest, 365 ArkWeb_HttpBodyStream** httpBodyStream); 366 367 /** 368 * @brief Destroy the http body stream. 369 * @param httpBodyStream The httpBodyStream to be destroyed. 370 * 371 * @syscap SystemCapability.Web.Webview.Core 372 * @since 12 373 */ 374 void OH_ArkWebResourceRequest_DestroyHttpBodyStream(ArkWeb_HttpBodyStream* httpBodyStream); 375 376 /** 377 * @brief Get the resource type of request. 378 * @param resourceRequest The ArkWeb_ResourceRequest. 379 * @return The resource type of request. -1 if resourceRequest is invalid. 380 * 381 * @syscap SystemCapability.Web.Webview.Core 382 * @since 12 383 */ 384 int32_t OH_ArkWebResourceRequest_GetResourceType(const ArkWeb_ResourceRequest* resourceRequest); 385 386 /** 387 * @brief Get the url of frame which trigger this request. 388 * @param resourceRequest The ArkWeb_ResourceRequest. 389 * @param frameUrl The url of frame which trigger this request. This function will allocate memory for the url string 390 * and caller must release the string by OH_ArkWeb_ReleaseString. 391 * 392 * @syscap SystemCapability.Web.Webview.Core 393 * @since 12 394 */ 395 void OH_ArkWebResourceRequest_GetFrameUrl(const ArkWeb_ResourceRequest* resourceRequest, char** frameUrl); 396 397 /** 398 * @brief Set a user data to ArkWeb_HttpBodyStream. 399 * @param httpBodyStream The ArkWeb_HttpBodyStream. 400 * @param userData The user data to set. 401 * @return {@link ARKWEB_NET_OK} 0 - Success. 402 * {@link ARKWEB_INVALID_PARAM} 17100101 - Invalid param. 403 * 404 * @syscap SystemCapability.Web.Webview.Core 405 * @since 12 406 */ 407 int32_t OH_ArkWebHttpBodyStream_SetUserData(ArkWeb_HttpBodyStream* httpBodyStream, void* userData); 408 409 /** 410 * @brief Get the user data from ArkWeb_HttpBodyStream. 411 * @param httpBodyStream The ArkWeb_HttpBodyStream. 412 * @return The set user data. 413 * 414 * @syscap SystemCapability.Web.Webview.Core 415 * @since 12 416 */ 417 void* OH_ArkWebHttpBodyStream_GetUserData(const ArkWeb_HttpBodyStream* httpBodyStream); 418 419 /** 420 * @brief Set the callback for OH_ArkWebHttpBodyStream_Read. 421 * 422 * The result of OH_ArkWebHttpBodyStream_Read will be notified to caller through the readCallback.\n 423 * The callback will run in the same thread as OH_ArkWebHttpBodyStream_Read.\n 424 * 425 * @param httpBodyStream The ArkWeb_HttpBodyStream. 426 * @param readCallback The callback of read function. 427 * @return {@link ARKWEB_NET_OK} 0 - Success. 428 * {@link ARKWEB_INVALID_PARAM} 17100101 - Invalid param. 429 * 430 * @syscap SystemCapability.Web.Webview.Core 431 * @since 12 432 */ 433 int32_t OH_ArkWebHttpBodyStream_SetReadCallback(ArkWeb_HttpBodyStream* httpBodyStream, 434 ArkWeb_HttpBodyStreamReadCallback readCallback); 435 436 /** 437 * @brief Init the http body stream. 438 * 439 * This function must be called before calling any other functions.\n 440 * 441 * @param httpBodyStream The ArkWeb_HttpBodyStream. 442 * @param initCallback The callback of init. 443 * @return {@link ARKWEB_NET_OK} 0 - Success. 444 * {@link ARKWEB_INVALID_PARAM} 17100101 - Invalid param. 445 * 446 * @syscap SystemCapability.Web.Webview.Core 447 * @since 12 448 */ 449 int32_t OH_ArkWebHttpBodyStream_Init(ArkWeb_HttpBodyStream* httpBodyStream, 450 ArkWeb_HttpBodyStreamInitCallback initCallback); 451 452 /** 453 * @brief Read the http body to the buffer. 454 * 455 * The buffer must be larger than the bufLen. We will be reading data from a worker thread to the buffer,\n 456 * so should not use the buffer in other threads before the callback to avoid concurrency issues.\n 457 * 458 * @param httpBodyStream The ArkWeb_HttpBodyStream. 459 * @param buffer The buffer to receive data. 460 * @param bufLen The size of bytes to read. 461 * 462 * @syscap SystemCapability.Web.Webview.Core 463 * @since 12 464 */ 465 void OH_ArkWebHttpBodyStream_Read(const ArkWeb_HttpBodyStream* httpBodyStream, uint8_t* buffer, int bufLen); 466 467 /** 468 * @brief Get the total size of the data stream. 469 * 470 * When data is chunked or httpBodyStream is invalid, always return zero.\n 471 * 472 * @param httpBodyStream The ArkWeb_HttpBodyStream. 473 * @return The size of data stream. 474 * 475 * @syscap SystemCapability.Web.Webview.Core 476 * @since 12 477 */ 478 uint64_t OH_ArkWebHttpBodyStream_GetSize(const ArkWeb_HttpBodyStream* httpBodyStream); 479 480 /** 481 * @brief Get the current position of the data stream. 482 * @param httpBodyStream The ArkWeb_HttpBodyStream. 483 * @return The current position of data stream. 0 if httpBodyStream is invalid. 484 * 485 * @syscap SystemCapability.Web.Webview.Core 486 * @since 12 487 */ 488 uint64_t OH_ArkWebHttpBodyStream_GetPosition(const ArkWeb_HttpBodyStream* httpBodyStream); 489 490 /** 491 * @brief Get if the data stream is chunked. 492 * @param httpBodyStream The ArkWeb_HttpBodyStream. 493 * @return True if is chunked; false otherwise. 494 * 495 * @syscap SystemCapability.Web.Webview.Core 496 * @since 12 497 */ 498 bool OH_ArkWebHttpBodyStream_IsChunked(const ArkWeb_HttpBodyStream* httpBodyStream); 499 500 501 /** 502 * @brief Returns true if all data has been consumed from this upload data stream. 503 * 504 * For chunked uploads, returns false until the first read attempt.\n 505 * 506 * @param httpBodyStream The ArkWeb_HttpBodyStream. 507 * @return True if all data has been consumed; false otherwise. 508 * 509 * @syscap SystemCapability.Web.Webview.Core 510 * @since 12 511 */ 512 bool OH_ArkWebHttpBodyStream_IsEof(const ArkWeb_HttpBodyStream* httpBodyStream); 513 514 /** 515 * @brief Returns true if the upload data in the stream is entirely in memory, 516 * and all read requests will succeed synchronously. 517 * 518 * Expected to return false for chunked requests.\n 519 * 520 * @param httpBodyStream The ArkWeb_HttpBodyStream. 521 * @return True if the upload data is in memory; false otherwise. 522 * 523 * @syscap SystemCapability.Web.Webview.Core 524 * @since 12 525 */ 526 bool OH_ArkWebHttpBodyStream_IsInMemory(const ArkWeb_HttpBodyStream* httpBodyStream); 527 528 /** 529 * @brief Destroy the ArkWeb_ResourceRequest. 530 * @param resourceRequest The ArkWeb_ResourceRequest. 531 * @return {@link ARKWEB_NET_OK} 0 - Success. 532 * {@link ARKWEB_INVALID_PARAM} 17100101 - Invalid param. 533 * 534 * @syscap SystemCapability.Web.Webview.Core 535 * @since 12 536 */ 537 int32_t OH_ArkWebResourceRequest_Destroy(const ArkWeb_ResourceRequest* resourceRequest); 538 539 /** 540 * @brief Get the referrer of request. 541 * @param resourceRequest The ArkWeb_ResourceRequest. 542 * @param referrer The request's referrer. This function will allocate memory for the post data string and caller 543 * must release the string by OH_ArkWeb_ReleaseString. 544 * 545 * @syscap SystemCapability.Web.Webview.Core 546 * @since 12 547 */ 548 void OH_ArkWebResourceRequest_GetReferrer(const ArkWeb_ResourceRequest* resourceRequest, char** referrer); 549 550 /** 551 * @brief Get the OH_ArkWeb_RequestHeaderList of the request. 552 * @param resourceRequest The ArkWeb_ResourceRequest. 553 * @param requestHeaderList The RequestHeaderList of request. 554 * 555 * @syscap SystemCapability.Web.Webview.Core 556 * @since 12 557 */ 558 void OH_ArkWebResourceRequest_GetRequestHeaders(const ArkWeb_ResourceRequest* resourceRequest, 559 ArkWeb_RequestHeaderList** requestHeaderList); 560 561 /** 562 * @brief Get if this is a redirect request. 563 * @param resourceRequest The ArkWeb_ResourceRequest. 564 * @return True if this is a redirect; false otherwise. 565 * 566 * @syscap SystemCapability.Web.Webview.Core 567 * @since 12 568 */ 569 bool OH_ArkWebResourceRequest_IsRedirect(const ArkWeb_ResourceRequest* resourceRequest); 570 571 /** 572 * @brief Get if this is a request from main frame. 573 * @param resourceRequest The ArkWeb_ResourceRequest. 574 * @return True if this is from main frame; false otherwise. 575 * 576 * @syscap SystemCapability.Web.Webview.Core 577 * @since 12 578 */ 579 bool OH_ArkWebResourceRequest_IsMainFrame(const ArkWeb_ResourceRequest* resourceRequest); 580 581 /** 582 * @brief Get if this is a request is triggered by user gesutre. 583 * @param resourceRequest The ArkWeb_ResourceRequest. 584 * @return True if this is triggered by user gesture; false otherwise. 585 * 586 * @syscap SystemCapability.Web.Webview.Core 587 * @since 12 588 */ 589 bool OH_ArkWebResourceRequest_HasGesture(const ArkWeb_ResourceRequest* resourceRequest); 590 591 /** 592 * @brief Register custom scheme to the ArkWeb. 593 * 594 * Should not be called for built-in HTTP, HTTPS, FILE, FTP, ABOUT and DATA schemes.\n 595 * This function should be called on main thread.\n 596 * 597 * @param scheme The scheme to regist. 598 * @param option The configuration of the scheme. 599 * @return {@link ARKWEB_NET_OK} 0 - Success. 600 * {@link ARKWEB_ERROR_UNKNOWN} 17100100 - Unknown error. 601 * {@link ARKWEB_INVALID_PARAM} 17100101 - Invalid param. 602 * {@link ARKWEB_SCHEME_REGISTER_FAILED} 17100102 - Register custom schemes should be called 603 * before create any ArkWeb. 604 * 605 * @syscap SystemCapability.Web.Webview.Core 606 * @since 12 607 */ 608 int32_t OH_ArkWeb_RegisterCustomSchemes(const char* scheme, int32_t option); 609 610 /** 611 * @brief Set a ArkWeb_SchemeHandler for a specific scheme to intercept requests of that scheme type. 612 * 613 * SchemeHandler should be set after the BrowserContext created.\n 614 * Use WebviewController.initializeWebEngine to initialize the BrowserContext without create a ArkWeb.\n 615 * 616 * @param scheme Scheme that need to be intercepted. 617 * @param schemeHandler The SchemeHandler for the scheme. Only requests triggered by ServiceWorker will be notified 618 * through this handler. 619 * @return Return true if set SchemeHandler for specific scheme successful, return false otherwise. 620 * 621 * @syscap SystemCapability.Web.Webview.Core 622 * @since 12 623 */ 624 bool OH_ArkWebServiceWorker_SetSchemeHandler(const char* scheme, ArkWeb_SchemeHandler* schemeHandler); 625 626 /** 627 * @brief Set a ArkWeb_SchemeHandler for a specific scheme to intercept requests of that scheme type. 628 * 629 * SchemeHandler should be set after the BrowserContext created.\n 630 * Use WebviewController.initializeWebEngine to initialize the BrowserContext without create a ArkWeb.\n 631 * 632 * @param scheme Scheme that need to be intercepted. 633 * @param webTag The name of the web component. 634 * @param schemeHandler The SchemeHandler for the scheme. Only requests triggered from the specified web will be 635 * notified through this handler. 636 * @return Return true if set SchemeHandler for specific scheme successful, return false otherwise. 637 * 638 * @syscap SystemCapability.Web.Webview.Core 639 * @since 12 640 */ 641 bool OH_ArkWeb_SetSchemeHandler(const char* scheme, const char* webTag, ArkWeb_SchemeHandler* schemeHandler); 642 643 /** 644 * @brief Clear the handler registered on the specified web for service worker. 645 * @return {@link ARKWEB_NET_OK} 0 - Success. 646 * 647 * @syscap SystemCapability.Web.Webview.Core 648 * @since 12 649 */ 650 int32_t OH_ArkWebServiceWorker_ClearSchemeHandlers(); 651 652 /** 653 * @brief Clear the handler registered on the specified web. 654 * @param webTag The name of the web component. 655 * @return {@link ARKWEB_NET_OK} 0 - Success. 656 * {@link ARKWEB_INVALID_PARAM} 17100101 - Invalid param. 657 * 658 * @syscap SystemCapability.Web.Webview.Core 659 * @since 12 660 */ 661 int32_t OH_ArkWeb_ClearSchemeHandlers(const char* webTag); 662 663 /** 664 * @brief Create a SchemeHandler. 665 * @param schemeHandler Return the created SchemeHandler. Use OH_ArkWeb_DestroySchemeHandler destroy it when donn't 666 * need it. 667 * 668 * @syscap SystemCapability.Web.Webview.Core 669 * @since 12 670 */ 671 void OH_ArkWeb_CreateSchemeHandler(ArkWeb_SchemeHandler** schemeHandler); 672 673 /** 674 * @brief Destroy a SchemeHandler. 675 * @param The ArkWeb_SchemeHandler to be destroy. 676 * 677 * @syscap SystemCapability.Web.Webview.Core 678 * @since 12 679 */ 680 void OH_ArkWeb_DestroySchemeHandler(ArkWeb_SchemeHandler* schemeHandler); 681 682 /** 683 * @brief Set a user data to ArkWeb_SchemeHandler. 684 * @param schemeHandler The ArkWeb_SchemeHandler. 685 * @param userData The user data to set. 686 * @return {@link ARKWEB_NET_OK} 0 - Success. 687 * {@link ARKWEB_INVALID_PARAM} 17100101 - Invalid param. 688 * 689 * @syscap SystemCapability.Web.Webview.Core 690 * @since 12 691 */ 692 int32_t OH_ArkWebSchemeHandler_SetUserData(ArkWeb_SchemeHandler* schemeHandler, void* userData); 693 694 /** 695 * @brief Get the user data from ArkWeb_SchemeHandler. 696 * @param schemeHandler The ArkWeb_SchemeHandler. 697 * @return The set user data. 698 * 699 * @syscap SystemCapability.Web.Webview.Core 700 * @since 12 701 */ 702 void* OH_ArkWebSchemeHandler_GetUserData(const ArkWeb_SchemeHandler* schemeHandler); 703 704 /** 705 * @brief Set the OnRequestStart callback for SchemeHandler. 706 * @param schemeHandler The SchemeHandler for the scheme. 707 * @param onRequestStart The OnRequestStart callback. 708 * @return {@link ARKWEB_NET_OK} 0 - Success. 709 * {@link ARKWEB_INVALID_PARAM} 17100101 - Invalid param. 710 * 711 * @syscap SystemCapability.Web.Webview.Core 712 * @since 12 713 */ 714 int32_t OH_ArkWebSchemeHandler_SetOnRequestStart(ArkWeb_SchemeHandler* schemeHandler, 715 ArkWeb_OnRequestStart onRequestStart); 716 717 /** 718 * @brief Set the OnRequestStop callback for SchemeHandler. 719 * @param schemeHandler The SchemeHandler for the scheme. 720 * @param onRequestStop The OnRequestStop callback. 721 * @return {@link ARKWEB_NET_OK} 0 - Success. 722 * {@link ARKWEB_INVALID_PARAM} 17100101 - Invalid param. 723 * 724 * @syscap SystemCapability.Web.Webview.Core 725 * @since 12 726 */ 727 int32_t OH_ArkWebSchemeHandler_SetOnRequestStop(ArkWeb_SchemeHandler* schemeHandler, 728 ArkWeb_OnRequestStop onRequestStop); 729 730 /** 731 * @brief Create a Response for a request. 732 * @param response The created Response. Use OH_ArkWeb_DestroyResponse to destroy when donn't need it. 733 * 734 * @syscap SystemCapability.Web.Webview.Core 735 * @since 12 736 */ 737 void OH_ArkWeb_CreateResponse(ArkWeb_Response** response); 738 739 /** 740 * @brief Destroy the Reponse. 741 * @param response The Response needs destroy. 742 * 743 * @syscap SystemCapability.Web.Webview.Core 744 * @since 12 745 */ 746 void OH_ArkWeb_DestroyResponse(ArkWeb_Response* response); 747 748 /** 749 * @brief Set the resolved URL after redirects or changed as a result of HSTS. 750 * @param response The ArkWeb_Response. 751 * @param url The resolved URL. 752 * @return {@link ARKWEB_NET_OK} 0 - Success. 753 * {@link ARKWEB_INVALID_PARAM} 17100101 - Invalid param. 754 * 755 * @syscap SystemCapability.Web.Webview.Core 756 * @since 12 757 */ 758 int32_t OH_ArkWebResponse_SetUrl(ArkWeb_Response* response, const char* url); 759 760 /** 761 * @brief Get the resolved URL after redirects or changed as a result of HSTS. 762 * @param response The ArkWeb_Response. 763 * @param url The resolved URL. 764 * 765 * @syscap SystemCapability.Web.Webview.Core 766 * @since 12 767 */ 768 void OH_ArkWebResponse_GetUrl(const ArkWeb_Response* response, char** url); 769 770 /** 771 * @brief Set a error code to ArkWeb_Response. 772 * @param response The ArkWeb_Response. 773 * @param errorCode The error code for the failed request. 774 * @return {@link ARKWEB_NET_OK} 0 - Success. 775 * {@link ARKWEB_INVALID_PARAM} 17100101 - Invalid param. 776 * 777 * @syscap SystemCapability.Web.Webview.Core 778 * @since 12 779 */ 780 int32_t OH_ArkWebResponse_SetError(ArkWeb_Response* response, ArkWeb_NetError errorCode); 781 782 /** 783 * @brief Get the response's error code. 784 * @param response The ArkWeb_Response. 785 * @return The response's error code. 786 * 787 * @syscap SystemCapability.Web.Webview.Core 788 * @since 12 789 */ 790 ArkWeb_NetError OH_ArkWebResponse_GetError(const ArkWeb_Response* response); 791 792 /** 793 * @brief Set a status code to ArkWebResponse. 794 * @param response The ArkWeb_Response. 795 * @param status The http status code for the request. 796 * @return {@link ARKWEB_NET_OK} 0 - Success. 797 * {@link ARKWEB_INVALID_PARAM} 17100101 - Invalid param. 798 * 799 * @syscap SystemCapability.Web.Webview.Core 800 * @since 12 801 */ 802 int32_t OH_ArkWebResponse_SetStatus(ArkWeb_Response* response, int status); 803 804 /** 805 * @brief Get the response's status code. 806 * @param response The ArkWeb_Response. 807 * @return The response's http status code. -1 if response is invalid. 808 * 809 * @syscap SystemCapability.Web.Webview.Core 810 * @since 12 811 */ 812 int OH_ArkWebResponse_GetStatus(const ArkWeb_Response* response); 813 814 /** 815 * @brief Set a status text to ArkWebResponse. 816 * @param response The ArkWeb_Response. 817 * @param statusText The status text for the request. 818 * @return {@link ARKWEB_NET_OK} 0 - Success. 819 * {@link ARKWEB_INVALID_PARAM} 17100101 - Invalid param. 820 * 821 * @syscap SystemCapability.Web.Webview.Core 822 * @since 12 823 */ 824 int32_t OH_ArkWebResponse_SetStatusText(ArkWeb_Response* response, const char* statusText); 825 826 /** 827 * @brief Get the response's status text. 828 * @param response The ArkWeb_Response. 829 * @param statusText Return the response's statusText. This function will allocate memory for the statusText string and 830 * caller must release the string by OH_ArkWeb_ReleaseString. 831 * 832 * @syscap SystemCapability.Web.Webview.Core 833 * @since 12 834 */ 835 void OH_ArkWebResponse_GetStatusText(const ArkWeb_Response* response, char** statusText); 836 837 /** 838 * @brief Set mime type to ArkWebResponse. 839 * @param response The ArkWeb_Response. 840 * @param mimeType The mime type for the request. 841 * @return {@link ARKWEB_NET_OK} 0 - Success. 842 * {@link ARKWEB_INVALID_PARAM} 17100101 - Invalid param. 843 * 844 * @syscap SystemCapability.Web.Webview.Core 845 * @since 12 846 */ 847 int32_t OH_ArkWebResponse_SetMimeType(ArkWeb_Response* response, const char* mimeType); 848 849 /** 850 * @brief Get the response's mime type. 851 * @param response The ArkWeb_Response. 852 * @param mimeType Return the response's mime type. This function will allocate memory for the mime type string and 853 * caller must release the string by OH_ArkWeb_ReleaseString. 854 * 855 * @syscap SystemCapability.Web.Webview.Core 856 * @since 12 857 */ 858 void OH_ArkWebResponse_GetMimeType(const ArkWeb_Response* response, char** mimeType); 859 860 /** 861 * @brief Set charset to ArkWeb_Response. 862 * @param response The ArkWeb_Response. 863 * @param charset The charset for the request. 864 * @return {@link ARKWEB_NET_OK} 0 - Success. 865 * {@link ARKWEB_INVALID_PARAM} 17100101 - Invalid param. 866 * 867 * @syscap SystemCapability.Web.Webview.Core 868 * @since 12 869 */ 870 int32_t OH_ArkWebResponse_SetCharset(ArkWeb_Response* response, const char* charset); 871 872 /** 873 * @brief Get the response's charset. 874 * @param response The ArkWeb_Response. 875 * @param charset Return the response's charset. This function will allocate memory for the charset string and caller 876 * must release the string by OH_ArkWeb_ReleaseString. 877 * 878 * @syscap SystemCapability.Web.Webview.Core 879 * @since 12 880 */ 881 void OH_ArkWebResponse_GetCharset(const ArkWeb_Response* response, char** charset); 882 883 /** 884 * @brief Set a header to ArkWeb_Response. 885 * @param response The ArkWeb_Response. 886 * @param name The name of the header. 887 * @param value The value of the header. 888 * @param overwirte If true will overwrite the exsits header, if false otherwise. 889 * @return {@link ARKWEB_NET_OK} 0 - Success. 890 * {@link ARKWEB_INVALID_PARAM} 17100101 - Invalid param. 891 * 892 * @syscap SystemCapability.Web.Webview.Core 893 * @since 12 894 */ 895 int32_t OH_ArkWebResponse_SetHeaderByName(ArkWeb_Response* response, 896 const char* name, 897 const char* value, 898 bool overwrite); 899 900 /** 901 * @brief Get the header from the response. 902 * @param response The ArkWeb_Response. 903 * @param name The name of the header. 904 * @param value Return the header's value. This function will allocate memory for the value string and caller must 905 * release the string by OH_ArkWeb_ReleaseString. 906 * 907 * @syscap SystemCapability.Web.Webview.Core 908 * @since 12 909 */ 910 void OH_ArkWebResponse_GetHeaderByName(const ArkWeb_Response* response, const char* name, char** value); 911 912 /** 913 * @brief Destroy the ArkWeb_ResourceHandler. 914 * @param resourceHandler The ArkWeb_ResourceHandler. 915 * @return {@link ARKWEB_NET_OK} 0 - Success. 916 * {@link ARKWEB_INVALID_PARAM} 17100101 - Invalid param. 917 * 918 * @syscap SystemCapability.Web.Webview.Core 919 * @since 12 920 */ 921 int32_t OH_ArkWebResourceHandler_Destroy(const ArkWeb_ResourceHandler* resourceHandler); 922 923 /** 924 * @brief Pass response headers to intercepted requests. 925 * @param resourceHandler The ArkWeb_ResourceHandler for the request. 926 * @param response The ArkWeb_Response for the intercepting requests. 927 * @return {@link ARKWEB_NET_OK} 0 - Success. 928 * {@link ARKWEB_INVALID_PARAM} 17100101 - Invalid param. 929 * 930 * @syscap SystemCapability.Web.Webview.Core 931 * @since 12 932 */ 933 int32_t OH_ArkWebResourceHandler_DidReceiveResponse(const ArkWeb_ResourceHandler* resourceHandler, 934 const ArkWeb_Response* response); 935 936 /** 937 * @brief Pass response body data to intercepted requests. 938 * @param resourceHandler The ArkWeb_ResourceHandler for the request. 939 * @param buffer Buffer data to send. 940 * @param bufLen The size of buffer. 941 * @return {@link ARKWEB_NET_OK} 0 - Success. 942 * {@link ARKWEB_INVALID_PARAM} 17100101 - Invalid param. 943 * 944 * @syscap SystemCapability.Web.Webview.Core 945 * @since 12 946 */ 947 int32_t OH_ArkWebResourceHandler_DidReceiveData(const ArkWeb_ResourceHandler* resourceHandler, 948 const uint8_t* buffer, 949 int64_t bufLen); 950 951 /** 952 * @brief Notify the ArkWeb that this request should be finished and there is no more data available. 953 * @param resourceHandler The ArkWeb_ResourceHandler for the request. 954 * @return {@link ARKWEB_NET_OK} 0 - Success. 955 * {@link ARKWEB_INVALID_PARAM} 17100101 - Invalid param. 956 * 957 * @syscap SystemCapability.Web.Webview.Core 958 * @since 12 959 */ 960 int32_t OH_ArkWebResourceHandler_DidFinish(const ArkWeb_ResourceHandler* resourceHandler); 961 962 /** 963 * @brief Notify the ArkWeb that this request should be failed. 964 * @param resourceHandler The ArkWeb_ResourceHandler for the request. 965 * @param errorCode The error code for this request. Refer to arkweb_net_error_list.h. 966 * @return {@link ARKWEB_NET_OK} 0 - Success. 967 * {@link ARKWEB_INVALID_PARAM} 17100101 - Invalid param. 968 * 969 * @syscap SystemCapability.Web.Webview.Core 970 * @since 12 971 */ 972 int32_t OH_ArkWebResourceHandler_DidFailWithError(const ArkWeb_ResourceHandler* resourceHandler, 973 ArkWeb_NetError errorCode); 974 975 /** 976 * @brief Release the string acquired by native function. 977 * @param string The string to be released. 978 * 979 * @syscap SystemCapability.Web.Webview.Core 980 * @since 12 981 */ 982 void OH_ArkWeb_ReleaseString(char* string); 983 984 /** 985 * @brief Release the byte array acquired by native function. 986 * @param byteArray The byte array to be released. 987 * 988 * @syscap SystemCapability.Web.Webview.Core 989 * @since 12 990 */ 991 void OH_ArkWeb_ReleaseByteArray(uint8_t* byteArray); 992 993 994 #ifdef __cplusplus 995 }; 996 #endif 997 #endif // ARKWEB_SCHEME_HANDLER_H 998