@@ -44,7 +44,7 @@ protected override void Dispose(bool disposing)
4444 {
4545 base . Dispose ( disposing ) ;
4646
47- if ( disposing )
47+ if ( disposing )
4848 {
4949 _jsonRpc ? . Dispose ( ) ;
5050 _jsonRpc = null ;
@@ -87,13 +87,23 @@ Task IOutOfProcessClientRpc.CloseHost()
8787 } ) ;
8888 }
8989
90- Task IOutOfProcessClientRpc . CreateBrowser ( IntPtr parentHwnd , string url , int id )
90+ Task IOutOfProcessClientRpc . CreateBrowser ( IntPtr parentHwnd , string url , int id , IDictionary < string , object > requestContextPreferences )
9191 {
9292 //Debugger.Break();
9393
9494 return CefThread . ExecuteOnUiThread ( ( ) =>
9595 {
96- var browser = new OutOfProcessChromiumWebBrowser ( _outOfProcessServer , id , url ) ;
96+ IRequestContext requestContext = null ;
97+ if ( requestContextPreferences != null )
98+ {
99+ requestContext = new RequestContext ( ) ;
100+ foreach ( KeyValuePair < string , object > pref in requestContextPreferences )
101+ {
102+ requestContext . SetPreference ( pref . Key , pref . Value , out _ ) ;
103+ }
104+ }
105+
106+ var browser = new OutOfProcessChromiumWebBrowser ( _outOfProcessServer , id , url , requestContext ) ;
97107
98108 var windowInfo = new WindowInfo ( ) ;
99109 windowInfo . WindowName = "CefSharpBrowserProcess" ;
@@ -124,5 +134,47 @@ void IOutOfProcessClientRpc.SetFocus(int browserId, bool focus)
124134
125135 browser ? . GetBrowserHost ( ) . SetFocus ( focus ) ;
126136 }
137+
138+ /// <summary>
139+ /// <param name="browserId">The browser id.</param>
140+ /// <param name="preferences">The preferences.</param>
141+ /// </summary>
142+ void IOutOfProcessClientRpc . UpdateRequestContextPreferences ( int browserId , IDictionary < string , object > preferences )
143+ {
144+ var browser = _browsers . FirstOrDefault ( x => x . Id == browserId ) ;
145+
146+ CefThread . ExecuteOnUiThread ( ( ) =>
147+ {
148+ if ( browser . GetRequestContext ( ) is IRequestContext requestContext )
149+ {
150+ foreach ( KeyValuePair < string , object > pref in preferences )
151+ {
152+ requestContext ? . SetPreference ( pref . Key , pref . Value , out _ ) ;
153+ }
154+ }
155+
156+ return true ;
157+ } ) ;
158+ }
159+
160+ /// <summary>
161+ /// <param name="browserId">The browser id.</param>
162+ /// <param name="preferences">The preferences.</param>
163+ /// </summary>
164+ void IOutOfProcessClientRpc . UpdateGlobalRequestContextPreferences ( IDictionary < string , object > preferences )
165+ {
166+ CefThread . ExecuteOnUiThread ( ( ) =>
167+ {
168+ if ( Cef . GetGlobalRequestContext ( ) is IRequestContext requestContext )
169+ {
170+ foreach ( KeyValuePair < string , object > pref in preferences )
171+ {
172+ requestContext ? . SetPreference ( pref . Key , pref . Value , out _ ) ;
173+ }
174+ }
175+
176+ return true ;
177+ } ) ;
178+ }
127179 }
128180}
0 commit comments