Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Fix Web
  • Loading branch information
ThomasAunvik authored and ditman committed Jul 9, 2024
commit 61b792d47a361dee55cd19198b37732a5294de3d
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'dart:html';
import 'package:web/web.dart';

/// Factory class for creating [HttpRequest] instances.
class HttpRequestFactory {
Expand Down Expand Up @@ -61,7 +60,7 @@ class HttpRequestFactory {
/// when the file cannot be found.
///
/// See also: [authorization headers](http://en.wikipedia.org/wiki/Basic_access_authentication).
Future<HttpRequest> request(String url,
Future<XMLHttpRequest> request(String url,
{String? method,
bool? withCredentials,
String? responseType,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
// found in the LICENSE file.

import 'dart:convert';
import 'dart:html' as html;
import 'dart:ui_web' as ui_web;

import 'package:flutter/cupertino.dart';
import 'package:web/web.dart' as html;
import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart';

import 'content_type.dart';
Expand Down Expand Up @@ -38,7 +38,7 @@ class WebWebViewControllerCreationParams

/// The underlying element used as the WebView.
@visibleForTesting
final html.IFrameElement iFrame = html.IFrameElement()
final html.HTMLIFrameElement iFrame = html.HTMLIFrameElement()
..id = 'webView${_nextIFrameId++}'
..style.width = '100%'
..style.height = '100%'
Expand Down Expand Up @@ -86,7 +86,7 @@ class WebWebViewController extends PlatformWebViewController {

/// Performs an AJAX request defined by [params].
Future<void> _updateIFrameFromXhr(LoadRequestParams params) async {
final html.HttpRequest httpReq =
final html.XMLHttpRequest httpReq =
await _webWebViewParams.httpRequestFactory.request(
params.uri.toString(),
method: params.method.serialize(),
Expand All @@ -101,7 +101,7 @@ class WebWebViewController extends PlatformWebViewController {

// ignore: unsafe_html
_webWebViewParams.iFrame.src = Uri.dataFromString(
httpReq.responseText ?? '',
httpReq.responseText,
mimeType: contentType.mimeType,
encoding: encoding,
).toString();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,16 @@

import 'dart:async';
import 'dart:convert';
import 'dart:html';
import 'dart:ui_web' as ui_web;

import 'package:flutter/foundation.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_web_plugins/flutter_web_plugins.dart';
import 'package:web/web.dart' as html;
// ignore: implementation_imports
import 'package:webview_flutter_platform_interface/src/webview_flutter_platform_interface_legacy.dart';

import 'http_request_factory.dart';

/// Builds an iframe based WebView.
Expand All @@ -23,7 +24,7 @@ class WebWebViewPlatform implements WebViewPlatform {
WebWebViewPlatform() {
ui_web.platformViewRegistry.registerViewFactory(
'webview-iframe',
(int viewId) => IFrameElement()
(int viewId) => html.HTMLIFrameElement()
..id = 'webview-$viewId'
..width = '100%'
..height = '100%'
Expand All @@ -45,11 +46,13 @@ class WebWebViewPlatform implements WebViewPlatform {
if (onWebViewPlatformCreated == null) {
return;
}
final IFrameElement element =
document.getElementById('webview-$viewId')! as IFrameElement;
if (creationParams.initialUrl != null) {
final html.HTMLIFrameElement element =
html.document.getElementById('webview-$viewId')! as html.HTMLIFrameElement;

final String? initialUrl = creationParams.initialUrl;
if (initialUrl != null) {
// ignore: unsafe_html
element.src = creationParams.initialUrl;
element.src = initialUrl;
}
onWebViewPlatformCreated(WebWebViewPlatformController(
element,
Expand All @@ -70,7 +73,7 @@ class WebWebViewPlatformController implements WebViewPlatformController {
/// Constructs a [WebWebViewPlatformController].
WebWebViewPlatformController(this._element);

final IFrameElement _element;
final html.HTMLIFrameElement _element;
HttpRequestFactory _httpRequestFactory = const HttpRequestFactory();

/// Setter for setting the HttpRequestFactory, for testing purposes.
Expand Down Expand Up @@ -199,7 +202,7 @@ class WebWebViewPlatformController implements WebViewPlatformController {
if (!request.uri.hasScheme) {
throw ArgumentError('WebViewRequest#uri is required to have a scheme.');
}
final HttpRequest httpReq = await _httpRequestFactory.request(
final html.XMLHttpRequest httpReq = await _httpRequestFactory.request(
request.uri.toString(),
method: request.method.serialize(),
requestHeaders: request.headers,
Expand All @@ -208,7 +211,7 @@ class WebWebViewPlatformController implements WebViewPlatformController {
httpReq.getResponseHeader('content-type') ?? 'text/html';
// ignore: unsafe_html
_element.src = Uri.dataFromString(
httpReq.responseText ?? '',
httpReq.responseText,
mimeType: contentType,
encoding: utf8,
).toString();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ dependencies:
sdk: flutter
flutter_web_plugins:
sdk: flutter
web: ^0.5.1
webview_flutter_platform_interface: ^2.0.0

dev_dependencies:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'dart:html';

import 'package:web/helpers.dart';
import 'package:web/web.dart' as html;
import 'dart:typed_data';

import 'package:flutter/material.dart';
Expand All @@ -16,12 +18,12 @@ import 'package:webview_flutter_web/src/webview_flutter_web_legacy.dart';
import 'webview_flutter_web_test.mocks.dart';

@GenerateMocks(<Type>[
IFrameElement,
html.HTMLIFrameElement,
BuildContext,
CreationParams,
WebViewPlatformCallbacksHandler,
HttpRequestFactory,
HttpRequest,
html.XMLHttpRequest,
])
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
Expand Down Expand Up @@ -123,7 +125,7 @@ void main() {
method: anyNamed('method'),
requestHeaders: anyNamed('requestHeaders'),
sendData: anyNamed('sendData'),
)).thenAnswer((_) => Future<HttpRequest>.value(mockHttpRequest));
)).thenAnswer((_) => Future<XMLHttpRequest>.value(mockHttpRequest));
controller.httpRequestFactory = mockHttpRequestFactory;
// Run
await controller.loadRequest(
Expand Down Expand Up @@ -162,7 +164,7 @@ void main() {
method: anyNamed('method'),
requestHeaders: anyNamed('requestHeaders'),
sendData: anyNamed('sendData'),
)).thenAnswer((_) => Future<HttpRequest>.value(mockHttpRequest));
)).thenAnswer((_) => Future<XMLHttpRequest>.value(mockHttpRequest));
controller.httpRequestFactory = mockHttpRequestFactory;
// Run
await controller.loadRequest(
Expand Down
Loading