Skip to content

[url_launcher] Fix supportsCloseForLaunchMode to query close support - #12926

Merged
auto-submit[bot] merged 7 commits into
flutter:mainfrom
NikhilKukreja26:fix-url-launcher-supports-close
Oct 2, 2026
Merged

auto-submit[bot] merged 7 commits into
flutter:mainfrom
NikhilKukreja26:fix-url-launcher-supports-close

Conversation

@NikhilKukreja26

Copy link
Copy Markdown
Contributor

Fixes flutter/flutter#192758

supportsCloseForLaunchMode was calling UrlLauncherPlatform.supportsMode
(the launch-support check) instead of supportsCloseForMode, so it reported
whether a mode can be launched rather than whether an in-app web view opened
with that mode can be closed. This changes it to call supportsCloseForMode,
and adds a regression test (the shared mock is extended so the two platform
methods can return different values).

Pre-launch Checklist

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request updates supportsCloseForLaunchMode to correctly query supportsCloseForMode on the platform instead of supportsMode, alongside a version bump to 6.3.3 and a new regression test. Feedback recommends allowing setCloseForModeResponse to accept a nullable bool? and adding a tearDown block to reset the mock state, ensuring proper test isolation and preventing test pollution.

Comment thread packages/url_launcher/url_launcher/test/mocks/mock_url_launcher_platform.dart Outdated
Comment thread packages/url_launcher/url_launcher/test/src/url_launcher_uri_test.dart Outdated

@stuartmorgan-g stuartmorgan-g left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the contribution!

Comment thread packages/url_launcher/url_launcher/test/mocks/mock_url_launcher_platform.dart Outdated
Comment thread packages/url_launcher/url_launcher/test/mocks/mock_url_launcher_platform.dart Outdated
Comment thread packages/url_launcher/url_launcher/test/src/url_launcher_uri_test.dart Outdated
Comment thread packages/url_launcher/url_launcher/test/src/url_launcher_uri_test.dart Outdated
Comment thread packages/url_launcher/url_launcher/CHANGELOG.md Outdated
@stuartmorgan-g stuartmorgan-g added the CICD Run CI/CD label Sep 18, 2026
@flutter-dashboard flutter-dashboard Bot removed the CICD Run CI/CD label Sep 21, 2026
@NikhilKukreja26

Copy link
Copy Markdown
Contributor Author

Thanks for the review! Addressed all points — fresh mock via setUp, removed the fallback and nullable setter, and trimmed the CHANGELOG.

@stuartmorgan-g

Copy link
Copy Markdown
Collaborator

In the future, please do not use an AI agent to open PRs with a hallucinated checklist. What is in the PR description is not this repository's checklist. The purpose of the checklist is to ensure that PRs follow our process, and using a different checklist defeats the purpose.

@stuartmorgan-g stuartmorgan-g added the CICD Run CI/CD label Sep 22, 2026
Comment thread packages/url_launcher/url_launcher/test/src/url_launcher_uri_test.dart Outdated
Comment thread packages/url_launcher/url_launcher/CHANGELOG.md
Comment thread packages/url_launcher/url_launcher/test/mocks/mock_url_launcher_platform.dart Outdated
@flutter-dashboard flutter-dashboard Bot removed the CICD Run CI/CD label Sep 23, 2026
@NikhilKukreja26

Copy link
Copy Markdown
Contributor Author

Addressed all three: renamed the mock responses to launchResponse/closeResponse, switched the test to the realistic true/false mismatch, and restored the CHANGELOG entry (it was dropped during the branch merge). Thanks!

@stuartmorgan-g stuartmorgan-g added the CICD Run CI/CD label Sep 23, 2026

@stuartmorgan-g stuartmorgan-g left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@QuncCccccc for secondary review

@QuncCccccc QuncCccccc left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Thank you!

@QuncCccccc QuncCccccc added the autosubmit Merge PR when tree becomes green via auto submit App label Oct 2, 2026
@auto-submit
auto-submit Bot merged commit 1cbff93 into flutter:main Oct 2, 2026
14 checks passed
ZhuJHua pushed a commit to ZhuJHua/flutter that referenced this pull request Oct 6, 2026
…er#193840)

flutter/packages@5620e65...951f2f7

2026-10-05 [email protected] [material_ui] Add scrollPadding
property to DropdownMenuFormField (flutter/packages#12735)
2026-10-02 [email protected] [material_ui]
Migrate M3 Motion template to use new gen_defaults
(flutter/packages#13058)
2026-10-02 [email protected]
[cupertino_ui] Forward showDragHandle from showCupertinoSheet to
CupertinoSheetRoute (flutter/packages#13011)
2026-10-02 [email protected] [cupertino_ui]
Fix CupertinoMagnifier focal point with custom size
(flutter/packages#13029)
2026-10-02 [email protected] [ci] Add material_ui and cupertino_ui
to customer testing (flutter/packages#13114)
2026-10-02 [email protected] [material_ui]
Add Material 3 Expressive migration skill (flutter/packages#12818)
2026-10-02 [email protected] [video_player] Ignore late position
updates after disposal (flutter/packages#12971)
2026-10-02 [email protected] [material_ui]
Remove unconditional dart:io import from about.dart
(flutter/packages#12774)
2026-10-02 [email protected] [material_ui] Fix
DropdownButtonFormField underline alignment at bottom
(flutter/packages#12606)
2026-10-02 [email protected] Roll Flutter from
e89fd0a to d03768e (23 revisions) (flutter/packages#13111)
2026-10-02 [email protected] [material_ui] Migrate
`Switch` API doc snippets to {@example} (batch 8)
(flutter/packages#13052)
2026-10-02 [email protected]
[url_launcher] Fix supportsCloseForLaunchMode to query close support
(flutter/packages#12926)
2026-10-02 [email protected] Redistribute
iOS/macOS Suggested Reviewers (flutter/packages#13076)
2026-10-02 [email protected] [image_picker] Subsample large images
when resizing on Android (flutter/packages#13038)
2026-10-02 [email protected] [cupertino_ui] Remove
redundant null arguments in Completer.complete (flutter/packages#13008)
2026-10-02 [email protected] [repo]
Update AGENTS.md with dependency allowance and versioning guidance
(flutter/packages#12579)

If this roll has caused a breakage, revert this CL and set the roller
to dry run mode using the controls here:
https://autoroll.skia.org/r/flutter-packages-flutter-autoroll
Please CC [email protected] on the revert to ensure that a
human
is aware of the problem.

To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
@this-sunil

Copy link
Copy Markdown

Specially ios doesn't support swift architecture spm but flutter also up to date pkg and found bugs every time community is weak

#if 0
#elif defined(arm64) && arm64
// Generated by Apple Swift version 6.4 effective-5.10 (swiftlang-6.4.0.34.1 clang-2100.3.34.1)
#ifndef URL_LAUNCHER_IOS_SWIFT_H
#define URL_LAUNCHER_IOS_SWIFT_H
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wgcc-compat"

#if !defined(__has_include)

define __has_include(x) 0

#endif
#if !defined(__has_attribute)

define __has_attribute(x) 0

#endif
#if !defined(__has_feature)

define __has_feature(x) 0

#endif
#if !defined(__has_warning)

define __has_warning(x) 0

#endif

#if __has_include(<swift/objc-prologue.h>)

include <swift/objc-prologue.h>

#endif

#pragma clang diagnostic ignored "-Wauto-import"
#if defined(OBJC)
#include <Foundation/Foundation.h>
#endif // defined(OBJC)
#if defined(__cplusplus)
#include
#include
#include
#include <stdlib.h>
#include
#include <type_traits>
#else
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
#include <string.h>
#endif
#if defined(__cplusplus)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wnon-modular-include-in-framework-module"
#if defined(arm64e) && __has_include(<ptrauth.h>)

include <ptrauth.h>

#else
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wreserved-macro-identifier"

ifndef __ptrauth_swift_value_witness_function_pointer

define __ptrauth_swift_value_witness_function_pointer(x)

endif

ifndef __ptrauth_swift_class_method_pointer

define __ptrauth_swift_class_method_pointer(x)

endif

#pragma clang diagnostic pop
#endif
#pragma clang diagnostic pop
#endif

#if !defined(SWIFT_TYPEDEFS)

define SWIFT_TYPEDEFS 1

if __has_include(<uchar.h>)

include <uchar.h>

elif !defined(__cplusplus)

typedef unsigned char char8_t;
typedef uint_least16_t char16_t;
typedef uint_least32_t char32_t;

endif

typedef float swift_float2 attribute((ext_vector_type(2)));
typedef float swift_float3 attribute((ext_vector_type(3)));
typedef float swift_float4 attribute((ext_vector_type(4)));
typedef double swift_double2 attribute((ext_vector_type(2)));
typedef double swift_double3 attribute((ext_vector_type(3)));
typedef double swift_double4 attribute((ext_vector_type(4)));
typedef int swift_int2 attribute((ext_vector_type(2)));
typedef int swift_int3 attribute((ext_vector_type(3)));
typedef int swift_int4 attribute((ext_vector_type(4)));
typedef unsigned int swift_uint2 attribute((ext_vector_type(2)));
typedef unsigned int swift_uint3 attribute((ext_vector_type(3)));
typedef unsigned int swift_uint4 attribute((ext_vector_type(4)));
#endif

#if !defined(SWIFT_PASTE)

define SWIFT_PASTE_HELPER(x, y) x##y

define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)

#endif
#if !defined(SWIFT_METATYPE)

define SWIFT_METATYPE(X) Class

#endif
#if !defined(SWIFT_CLASS_PROPERTY)

if __has_feature(objc_class_property)

define SWIFT_CLASS_PROPERTY(...) VA_ARGS

else

define SWIFT_CLASS_PROPERTY(...)

endif

#endif
#if !defined(SWIFT_RUNTIME_NAME)

if __has_attribute(objc_runtime_name)

define SWIFT_RUNTIME_NAME(X) attribute((objc_runtime_name(X)))

else

define SWIFT_RUNTIME_NAME(X)

endif

#endif
#if !defined(SWIFT_COMPILE_NAME)

if __has_attribute(swift_name)

define SWIFT_COMPILE_NAME(X) attribute((swift_name(X)))

else

define SWIFT_COMPILE_NAME(X)

endif

#endif
#if !defined(SWIFT_METHOD_FAMILY)

if __has_attribute(objc_method_family)

define SWIFT_METHOD_FAMILY(X) attribute((objc_method_family(X)))

else

define SWIFT_METHOD_FAMILY(X)

endif

#endif
#if !defined(SWIFT_NOESCAPE)

if __has_attribute(noescape)

define SWIFT_NOESCAPE attribute((noescape))

else

define SWIFT_NOESCAPE

endif

#endif
#if !defined(SWIFT_RELEASES_ARGUMENT)

if __has_attribute(ns_consumed)

define SWIFT_RELEASES_ARGUMENT attribute((ns_consumed))

else

define SWIFT_RELEASES_ARGUMENT

endif

#endif
#if !defined(SWIFT_WARN_UNUSED_RESULT)

if __has_attribute(warn_unused_result)

define SWIFT_WARN_UNUSED_RESULT attribute((warn_unused_result))

else

define SWIFT_WARN_UNUSED_RESULT

endif

#endif
#if !defined(SWIFT_NORETURN)

if __has_attribute(noreturn)

define SWIFT_NORETURN attribute((noreturn))

else

define SWIFT_NORETURN

endif

#endif
#if !defined(SWIFT_CLASS_EXTRA)

define SWIFT_CLASS_EXTRA

#endif
#if !defined(SWIFT_PROTOCOL_EXTRA)

define SWIFT_PROTOCOL_EXTRA

#endif
#if !defined(SWIFT_ENUM_EXTRA)

define SWIFT_ENUM_EXTRA

#endif
#if !defined(SWIFT_CLASS)

if __has_attribute(objc_subclassing_restricted)

define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) attribute((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA

define SWIFT_CLASS_NAMED(SWIFT_NAME) attribute((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA

else

define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA

define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA

endif

#endif
#if !defined(SWIFT_RESILIENT_CLASS)

if __has_attribute(objc_class_stub)

define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) attribute((objc_class_stub))

define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) attribute((objc_class_stub)) SWIFT_CLASS_NAMED(SWIFT_NAME)

else

define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME)

define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME)

endif

#endif
#if !defined(SWIFT_PROTOCOL)

define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA

define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA

#endif
#if !defined(SWIFT_EXTENSION)

define SWIFT_EXTENSION(M) SWIFT_PASTE(M##Swift, LINE)

#endif
#if !defined(OBJC_DESIGNATED_INITIALIZER)

if __has_attribute(objc_designated_initializer)

define OBJC_DESIGNATED_INITIALIZER attribute((objc_designated_initializer))

else

define OBJC_DESIGNATED_INITIALIZER

endif

#endif
#if !defined(SWIFT_ENUM_ATTR)

if __has_attribute(enum_extensibility)

define SWIFT_ENUM_ATTR(_extensibility) attribute((enum_extensibility(_extensibility)))

else

define SWIFT_ENUM_ATTR(_extensibility)

endif

#endif
#if !defined(SWIFT_ENUM)

if (defined(__cplusplus) && __cplusplus >= 201103L) || (defined(STDC_VERSION) && STDC_VERSION >= 202311L) || __has_feature(objc_fixed_enum)

define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type

if __has_feature(generalized_swift_name)

define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type

else

define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility)

endif

else

define SWIFT_ENUM(_type, _name, _extensibility) _type _name; enum

define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility)

endif

#endif
#if !defined(SWIFT_ENUM_TAG)

if (defined(__cplusplus) && __cplusplus >= 201103L) || (defined(STDC_VERSION) && STDC_VERSION >= 202311L) || __has_feature(objc_fixed_enum)

define SWIFT_ENUM_TAG enum

else

define SWIFT_ENUM_TAG

endif

#endif
#if !defined(SWIFT_ENUM_FWD_DECL)

if (defined(__cplusplus) && __cplusplus >= 201103L) || (defined(STDC_VERSION) && STDC_VERSION >= 202311L) || __has_feature(objc_fixed_enum)

define SWIFT_ENUM_FWD_DECL(_type, _name) enum _name : _type;

else

define SWIFT_ENUM_FWD_DECL(_type, _name) typedef _type _name;

endif

#endif
#if !defined(SWIFT_UNAVAILABLE)

define SWIFT_UNAVAILABLE attribute((unavailable))

#endif
#if !defined(SWIFT_UNAVAILABLE_MSG)

define SWIFT_UNAVAILABLE_MSG(msg) attribute((unavailable(msg)))

#endif
#if !defined(SWIFT_AVAILABILITY)

define SWIFT_AVAILABILITY(plat, ...) attribute((availability(plat, VA_ARGS)))

#endif
#if !defined(SWIFT_AVAILABILITY_DOMAIN)

define SWIFT_AVAILABILITY_DOMAIN(dom, ...) attribute((availability(domain: dom, VA_ARGS)))

#endif
#if !defined(SWIFT_WEAK_IMPORT)

define SWIFT_WEAK_IMPORT attribute((weak_import))

#endif
#if !defined(SWIFT_DEPRECATED)

define SWIFT_DEPRECATED attribute((deprecated))

#endif
#if !defined(SWIFT_DEPRECATED_MSG)

define SWIFT_DEPRECATED_MSG(...) attribute((deprecated(VA_ARGS)))

#endif
#if !defined(SWIFT_DEPRECATED_OBJC)

if __has_feature(attribute_diagnose_if_objc)

define SWIFT_DEPRECATED_OBJC(Msg) attribute((diagnose_if(1, Msg, "warning")))

else

define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg)

endif

#endif
#if defined(OBJC)
#if !defined(IBSegueAction)

define IBSegueAction

#endif
#endif
#if !defined(SWIFT_EXTERN)

if defined(__cplusplus)

define SWIFT_EXTERN extern "C"

else

define SWIFT_EXTERN extern

endif

#endif
#if !defined(SWIFT_CALL)

define SWIFT_CALL attribute((swiftcall))

#endif
#if !defined(SWIFT_INDIRECT_RESULT)

define SWIFT_INDIRECT_RESULT attribute((swift_indirect_result))

#endif
#if !defined(SWIFT_CONTEXT)

define SWIFT_CONTEXT attribute((swift_context))

#endif
#if !defined(SWIFT_ERROR_RESULT)

define SWIFT_ERROR_RESULT attribute((swift_error_result))

#endif
#if defined(__cplusplus)

define SWIFT_NOEXCEPT noexcept

#else

define SWIFT_NOEXCEPT

#endif
#if !defined(SWIFT_C_INLINE_THUNK)

if __has_attribute(always_inline)

if __has_attribute(nodebug)

define SWIFT_C_INLINE_THUNK inline attribute((always_inline)) attribute((nodebug))

else

define SWIFT_C_INLINE_THUNK inline attribute((always_inline))

endif

else

define SWIFT_C_INLINE_THUNK inline

endif

#endif
#if defined(_WIN32)
#if !defined(SWIFT_IMPORT_STDLIB_SYMBOL)

define SWIFT_IMPORT_STDLIB_SYMBOL __declspec(dllimport)

#endif
#else
#if !defined(SWIFT_IMPORT_STDLIB_SYMBOL)

define SWIFT_IMPORT_STDLIB_SYMBOL

#endif
#endif
#if !__has_feature(nullability)

define _Nonnull

define _Nullable

define _Null_unspecified

#elif !defined(OBJC)

pragma clang diagnostic ignored "-Wnullability-extension"

#endif
#if !__has_feature(nullability_nullable_result)

define _Nullable_result _Nullable

#endif
#if __has_feature(objc_modules)
#if __has_warning("-Watimport-in-framework-header")
#pragma clang diagnostic ignored "-Watimport-in-framework-header"
#endif
#endif

#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
#pragma clang diagnostic ignored "-Wduplicate-method-arg"
#if __has_warning("-Wpragma-clang-attribute")

pragma clang diagnostic ignored "-Wpragma-clang-attribute"

#endif
#pragma clang diagnostic ignored "-Wunknown-pragmas"
#pragma clang diagnostic ignored "-Wnullability"
#pragma clang diagnostic ignored "-Warc-bridge-casts-disallowed-in-nonarc"
#pragma clang diagnostic ignored "-Wdollar-in-identifier-extension"
#pragma clang diagnostic ignored "-Wunsafe-buffer-usage"

#if __has_attribute(external_source_symbol)

pragma push_macro("any")

undef any

pragma clang attribute push(attribute((external_source_symbol(language="Swift", defined_in="url_launcher_ios",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol))

pragma pop_macro("any")

#endif

#if defined(__cplusplus)
extern "C" {
#endif

#if defined(__cplusplus)
} // extern "C"
#endif
#if __has_attribute(external_source_symbol)

pragma clang attribute pop

#endif
#if defined(OBJC)
#if __has_feature(objc_modules)
#if __has_warning("-Watimport-in-framework-header")
#pragma clang diagnostic ignored "-Watimport-in-framework-header"
#endif
@import Flutter;
@import ObjectiveC;
#endif

#endif // defined(OBJC)
#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
#pragma clang diagnostic ignored "-Wduplicate-method-arg"
#if __has_warning("-Wpragma-clang-attribute")

pragma clang diagnostic ignored "-Wpragma-clang-attribute"

#endif
#pragma clang diagnostic ignored "-Wunknown-pragmas"
#pragma clang diagnostic ignored "-Wnullability"
#pragma clang diagnostic ignored "-Warc-bridge-casts-disallowed-in-nonarc"
#pragma clang diagnostic ignored "-Wdollar-in-identifier-extension"
#pragma clang diagnostic ignored "-Wunsafe-buffer-usage"

#if __has_attribute(external_source_symbol)

pragma push_macro("any")

undef any

pragma clang attribute push(attribute((external_source_symbol(language="Swift", defined_in="url_launcher_ios",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol))

pragma pop_macro("any")

#endif

#if defined(OBJC)

@protocol FlutterPluginRegistrar;
SWIFT_CLASS("_TtC16url_launcher_ios17URLLauncherPlugin")
@interface URLLauncherPlugin : NSObject

  • (void)registerWithRegistrar:(id _Nonnull)registrar;
  • (nonnull instancetype)init SWIFT_UNAVAILABLE;
  • (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
    @EnD

#endif // defined(OBJC)
#if __has_attribute(external_source_symbol)

pragma clang attribute pop

#endif
#if defined(__cplusplus)
#endif
#pragma clang diagnostic pop
#endif

#else
#error unsupported Swift architecture
#endif

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

autosubmit Merge PR when tree becomes green via auto submit App CICD Run CI/CD p: url_launcher

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[url_launcher] supportsCloseForLaunchMode calls supportsMode, so it answers "can this mode be launched" instead of "can it be closed"

4 participants