예제 #1
0
        /// <inheritdoc cref="IBrowserType"/>
        public override async Task <IBrowser> LaunchAsync(LaunchOptions options = null)
        {
            var app = await LaunchBrowserAppAsync(options).ConfigureAwait(false);

            var connectOptions = app.ConnectOptions;

            return(await ChromiumBrowser.ConnectAsync(app, connectOptions).ConfigureAwait(false));
        }
예제 #2
0
        /// <inheritdoc cref="IBrowserType"/>
        public async Task <IBrowser> LaunchAsync(LaunchOptions options = null)
        {
            var app = await LaunchBrowserAppAsync(options).ConfigureAwait(false);

            var connectOptions = app.ConnectOptions;

            connectOptions.EnqueueTransportMessages = options?.EnqueueTransportMessages ?? false;
            return(await ChromiumBrowser.ConnectAsync(app, connectOptions).ConfigureAwait(false));
        }
 internal ChromiumBrowserContext(
     ChromiumSession client,
     ChromiumBrowser chromiumBrowser,
     string contextId,
     BrowserContextOptions options)
 {
     _client    = client;
     _browser   = chromiumBrowser;
     _contextId = contextId;
     Options    = options;
 }
예제 #4
0
        public ChromiumPage(ChromiumSession client, ChromiumBrowser browser, IBrowserContext browserContext)
        {
            Client          = client;
            _browser        = browser;
            _browserContext = browserContext;
            _networkManager = new ChromiumNetworkManager(Client, this);
            RawKeyboard     = new ChromiumRawKeyboard(client);
            RawMouse        = new ChromiumRawMouse(client);
            Page            = new Page(this, browserContext);

            client.MessageReceived += Client_MessageReceived;
        }
예제 #5
0
        internal static async Task <IBrowser> ConnectAsync(IBrowserApp app, ConnectOptions options)
        {
            var transport = await BrowserHelper.CreateTransportAsync(options).ConfigureAwait(false);

            var connection = new ChromiumConnection(transport);
            var response   = await connection.RootSession.SendAsync(new TargetGetBrowserContextsRequest()).ConfigureAwait(false);

            var browser = new ChromiumBrowser(app, connection, response.BrowserContextIds);
            await connection.RootSession.SendAsync(new TargetSetDiscoverTargetsRequest { Discover = true }).ConfigureAwait(false);

            await browser.WaitForTargetAsync(t => t.Type == TargetType.Page).ConfigureAwait(false);

            return(browser);
        }
예제 #6
0
        internal ChromiumTarget(
            TargetInfo targetInfo,
            ChromiumBrowser browser,
            Func <Task <ChromiumSession> > sessionFactory,
            IBrowserContext browserContext)
        {
            TargetInfo      = targetInfo;
            _browser        = browser;
            _sessionFactory = sessionFactory;
            BrowserContext  = browserContext;
            PageTask        = null;

            _ = _initializedTaskWrapper.Task.ContinueWith(
                async initializedTask =>
            {
                bool success = initializedTask.Result;
                if (!success)
                {
                    return;
                }

                var openerPageTask = Opener?.PageTask;
                if (openerPageTask == null || Type != TargetType.Page)
                {
                    return;
                }

                var openerPage = await openerPageTask.ConfigureAwait(false);
                if (!openerPage.HasPopupEventListeners)
                {
                    return;
                }

                var popupPage = await PageAsync().ConfigureAwait(false);
                openerPage.OnPopup(popupPage);
            },
                CancellationToken.None,
                TaskContinuationOptions.RunContinuationsAsynchronously,
                TaskScheduler.Default);

            CloseTaskWrapper = new TaskCompletionSource <bool>(TaskCreationOptions.RunContinuationsAsynchronously);
            IsInitialized    = Type != TargetType.Page || !string.IsNullOrEmpty(TargetInfo.Url);

            if (IsInitialized)
            {
                _initializedTaskWrapper.TrySetResult(true);
            }
        }
예제 #7
0
        /// <inheritdoc cref="IBrowserType"/>
        public async Task <IBrowser> ConnectAsync(ConnectOptions options = null)
        {
            options = options == null ? new ConnectOptions() : options.Clone();

            if (!string.IsNullOrEmpty(options.BrowserURL))
            {
                if (!string.IsNullOrEmpty(options.BrowserWSEndpoint) && options.TransportFactory != null)
                {
                    throw new ArgumentException("Exactly one of BrowserWSEndpoint or TransportFactory must be passed to connect");
                }

                options.BrowserWSEndpoint = await GetWSEndpointAsync(options.BrowserURL).ConfigureAwait(false);
            }

            return(await ChromiumBrowser.ConnectAsync(options).ConfigureAwait(false));
        }
 internal ChromiumBrowserContext(ChromiumSession client, ChromiumBrowser chromiumBrowser) : this(client, chromiumBrowser, null, null)
 {
 }