<commit_before>// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import "/mojo/public/dart/application.dart";
import "dart:mojo_bindings" as bindings;
import "dart:mojo_core" as core;
import "dart:sky.internals" as internals;
import "package:mojo/public/interfaces/application/service_provider.mojom.dart";
import "package:mojo/public/interfaces/application/shell.mojom.dart";

final _EmbedderImpl embedder = new _EmbedderImpl();

class _EmbedderImpl {
  static final ShellProxy shell = new ShellProxy.fromHandle(
      new core.MojoHandle(internals.takeShellProxyHandle()));

  static final ApplicationConnection connection = new ApplicationConnection(
      new ServiceProviderStub.fromHandle(
          new core.MojoHandle(internals.takeServicesProvidedToEmbedder())),
      new ServiceProviderProxy.fromHandle(
          new core.MojoHandle(internals.takeServicesProvidedByEmbedder())));

  ApplicationConnection connectToApplication(String url) {
    var proxy = new ServiceProviderProxy.unbound();
    var stub = new ServiceProviderStub.unbound();
    shell.connectToApplication(url, proxy, stub);
    return new ApplicationConnection(stub, proxy);
  }

  void connectToService(String url, bindings.Proxy proxy) {
    var appSp = new ServiceProviderProxy.unbound();
    shell.connectToApplication(url, appSp, null);
    var pipe = new core.MojoMessagePipe();
    proxy.bind(pipe.endpoints[0]);
    appSp.connectToService(proxy.name, pipe.endpoints[1]);
    appSp.close();
  }
}
<commit_msg>Make Sky embedder.connection deal with null handles<commit_after>// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import "/mojo/public/dart/application.dart";
import "dart:mojo_bindings" as bindings;
import "dart:mojo_core" as core;
import "dart:sky.internals" as internals;
import "package:mojo/public/interfaces/application/service_provider.mojom.dart";
import "package:mojo/public/interfaces/application/shell.mojom.dart";

final _EmbedderImpl embedder = new _EmbedderImpl();

class _EmbedderImpl {
  ApplicationConnection _connection;

  final ShellProxy shell = new ShellProxy.fromHandle(
      new core.MojoHandle(internals.takeShellProxyHandle()));

  ApplicationConnection get connection {
    if (_connection == null) {
      var stubHandle = new core.MojoHandle(
          internals.takeServicesProvidedToEmbedder());
      var proxyHandle = new core.MojoHandle(
          internals.takeServicesProvidedByEmbedder());
      _connection = new ApplicationConection(
         stubHandle.isValid ? ServiceProviderStub.fromHandle(stubHandle)
             : null;
         proxyHandle.isValid ? ServiceProviderProxy.fromHandle(proxyHandle)
             : null;
      );
    }
    return _connection;
  }

  ApplicationConnection connectToApplication(String url) {
    var proxy = new ServiceProviderProxy.unbound();
    var stub = new ServiceProviderStub.unbound();
    shell.connectToApplication(url, proxy, stub);
    return new ApplicationConnection(stub, proxy);
  }

  void connectToService(String url, bindings.Proxy proxy) {
    var appSp = new ServiceProviderProxy.unbound();
    shell.connectToApplication(url, appSp, null);
    var pipe = new core.MojoMessagePipe();
    proxy.bind(pipe.endpoints[0]);
    appSp.connectToService(proxy.name, pipe.endpoints[1]);
    appSp.close();
  }
}

{'fraction_non_alphanumeric': 0.09691130631907056, 'fraction_numerical': 0.003400396712949844, 'mean_word_length': 4.372907153729072, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3589842', 'n_tokens_mistral': 1027, 'n_tokens_neox': 1005, 'n_words': 246}