using ElectronNET.API.Entities; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Newtonsoft.Json.Serialization; using System; using System.Threading.Tasks; namespace ElectronNET.API { /// /// Render and control web pages. /// public class WebContents { /// /// Gets the identifier. /// /// /// The identifier. /// public int Id { get; private set; } /// /// Emitted when the renderer process crashes or is killed. /// public event Action OnCrashed { add { if (_crashed == null) { BridgeConnector.Socket.On("webContents-crashed" + Id, (killed) => { _crashed((bool)killed); }); BridgeConnector.Socket.Emit("register-webContents-crashed", Id); } _crashed += value; } remove { _crashed -= value; if (_crashed == null) BridgeConnector.Socket.Off("webContents-crashed" + Id); } } private event Action _crashed; /// /// Emitted when the navigation is done, i.e. the spinner of the tab has /// stopped spinning, and the onload event was dispatched. /// public event Action OnDidFinishLoad { add { if (_didFinishLoad == null) { BridgeConnector.Socket.On("webContents-didFinishLoad" + Id, () => { _didFinishLoad(); }); BridgeConnector.Socket.Emit("register-webContents-didFinishLoad", Id); } _didFinishLoad += value; } remove { _didFinishLoad -= value; if (_didFinishLoad == null) BridgeConnector.Socket.Off("webContents-didFinishLoad" + Id); } } private event Action _didFinishLoad; internal WebContents(int id) { Id = id; } /// /// Opens the devtools. /// public void OpenDevTools() { BridgeConnector.Socket.Emit("webContentsOpenDevTools", Id); } /// /// Opens the devtools. /// /// public void OpenDevTools(OpenDevToolsOptions openDevToolsOptions) { BridgeConnector.Socket.Emit("webContentsOpenDevTools", Id, JObject.FromObject(openDevToolsOptions, _jsonSerializer)); } /// /// Prints window's web page as PDF with Chromium's preview printing custom /// settings.The landscape will be ignored if @page CSS at-rule is used in the web page. /// By default, an empty options will be regarded as: Use page-break-before: always; /// CSS style to force to print to a new page. /// /// /// /// success public Task PrintToPDFAsync(string path, PrintToPDFOptions options = null) { var taskCompletionSource = new TaskCompletionSource(); BridgeConnector.Socket.On("webContents-printToPDF-completed", (success) => { BridgeConnector.Socket.Off("webContents-printToPDF-completed"); taskCompletionSource.SetResult((bool)success); }); if(options == null) { BridgeConnector.Socket.Emit("webContents-printToPDF", Id, "", path); } else { BridgeConnector.Socket.Emit("webContents-printToPDF", Id, JObject.FromObject(options, _jsonSerializer), path); } return taskCompletionSource.Task; } private JsonSerializer _jsonSerializer = new JsonSerializer() { ContractResolver = new CamelCasePropertyNamesContractResolver(), NullValueHandling = NullValueHandling.Ignore, DefaultValueHandling = DefaultValueHandling.Ignore }; } }