diff --git a/Browser/TweetDeckBrowser.cs b/Browser/TweetDeckBrowser.cs index ad40e3f6..6b6714ca 100644 --- a/Browser/TweetDeckBrowser.cs +++ b/Browser/TweetDeckBrowser.cs @@ -118,8 +118,6 @@ private void browser_LoadingStateChanged(object sender, LoadingStateChangedEvent browser.AddWordToDictionary(word); } - Cef.AddCrossOriginWhitelistEntry(TwitterUrls.TweetDeck, PluginSchemeFactory.Name, "", true); - browser.BeginInvoke(new Action(OnBrowserReady)); browser.LoadingStateChanged -= browser_LoadingStateChanged; } diff --git a/Plugins/PluginSchemeFactory.cs b/Plugins/PluginSchemeFactory.cs index 2cee0a64..777bc85d 100644 --- a/Plugins/PluginSchemeFactory.cs +++ b/Plugins/PluginSchemeFactory.cs @@ -1,4 +1,6 @@ -using System.Net; +using System.IO; +using System.Net; +using System.Text; using CefSharp; using TweetLib.Core.Browser; using TweetLib.Core.Features.Plugins; @@ -18,8 +20,16 @@ public IResourceHandler Create(IBrowser browser, IFrame frame, string schemeName } private sealed class ResourceProvider : IResourceProvider<IResourceHandler>{ + private static ResourceHandler CreateHandler(byte[] bytes){ + var handler = ResourceHandler.FromStream(new MemoryStream(bytes), autoDisposeStream: true); + handler.Headers.Set("Access-Control-Allow-Origin", "*"); + return handler; + } + public IResourceHandler Status(HttpStatusCode code, string message){ - return ResourceHandler.ForErrorMessage(message, code); + var handler = CreateHandler(Encoding.UTF8.GetBytes(message)); + handler.StatusCode = (int)code; + return handler; } public IResourceHandler File(byte[] bytes, string extension){ @@ -27,7 +37,9 @@ public IResourceHandler File(byte[] bytes, string extension){ return Status(HttpStatusCode.NoContent, "File is empty."); // FromByteArray crashes CEF internals with no contents } else{ - return ResourceHandler.FromByteArray(bytes, Cef.GetMimeType(extension)); + var handler = CreateHandler(bytes); + handler.MimeType = Cef.GetMimeType(extension); + return handler; } } }