Skip to content

Commit 247b1d0

Browse files
committed
Scheme Registration - Only register custom scheme name one
Adding multiple entries to CefSettings.RegisterScheme that share the same scheme name yet have different domain/schemehandlerfactory implementations is valid. We will only register the first set of SchemeName/SchemeOption values (first call to RegisterScheme).
1 parent 5a3ce3c commit 247b1d0

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

CefSharp.Core/Internals/CefSharpApp.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ namespace CefSharp
9191
{
9292
String^ argument = "=";
9393
bool hasCustomScheme = false;
94+
auto registeredSchemes = gcnew List<String^>();
9495

9596
for each(CefCustomScheme^ scheme in _cefSettings->CefCustomSchemes)
9697
{
@@ -101,8 +102,16 @@ namespace CefSharp
101102
continue;
102103
}
103104

105+
//We've already registered this scheme name
106+
if (registeredSchemes->Contains(scheme->SchemeName))
107+
{
108+
continue;
109+
}
110+
104111
hasCustomScheme = true;
105112

113+
registeredSchemes->Add(scheme->SchemeName);
114+
106115
argument += scheme->SchemeName + "|";
107116
argument += ((int)scheme->Options).ToString() + ";";
108117
}

CefSharp/DefaultApp.cs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ void IApp.OnRegisterCustomSchemes(ISchemeRegistrar registrar)
2727

2828
protected virtual void OnRegisterCustomSchemes(ISchemeRegistrar registrar)
2929
{
30+
//Possible we have duplicate scheme names, we'll only register the first one
31+
//Keep a list so we don't call AddCustomScheme twice for the same scheme name
32+
var registeredSchemes = new List<string>();
33+
3034
foreach (var scheme in Schemes)
3135
{
3236
//We don't need to register http or https, they're built in schemes
@@ -35,9 +39,18 @@ protected virtual void OnRegisterCustomSchemes(ISchemeRegistrar registrar)
3539
continue;
3640
}
3741

38-
var success = registrar.AddCustomScheme(scheme.SchemeName, scheme.Options);
42+
//We've already registered this scheme name
43+
if (registeredSchemes.Contains(scheme.SchemeName))
44+
{
45+
continue;
46+
}
3947

40-
if (!success)
48+
var success = registrar.AddCustomScheme(scheme.SchemeName, scheme.Options);
49+
if (success)
50+
{
51+
registeredSchemes.Add(scheme.SchemeName);
52+
}
53+
else
4154
{
4255
var msg = "CefSchemeRegistrar::AddCustomScheme failed for schemeName:" + scheme.SchemeName;
4356
//TODO: Log error

0 commit comments

Comments
 (0)