text: goog.provide('webfont.modules.google.GoogleFontApi');
  
  goog.require('webfont.modules.google.FontApiUrlBuilder');
  goog.require('webfont.modules.google.FontApiParser');
  goog.require('webfont.FontWatchRunner');
  goog.require('webfont.StyleSheetWaiter');
  
  /**
   * @constructor
   * @implements {webfont.FontModule}
   */
  webfont.modules.google.GoogleFontApi = function(domHelper, configuration) {
    this.domHelper_ = domHelper;
    this.configuration_ = configuration;
  };
  
  /**
   * @const
   * @type {string}
   */
  webfont.modules.google.GoogleFontApi.NAME = 'google';
  
  goog.scope(function () {
    var GoogleFontApi = webfont.modules.google.GoogleFontApi,
        FontWatchRunner = webfont.FontWatchRunner,
        StyleSheetWaiter = webfont.StyleSheetWaiter,
        FontApiUrlBuilder = webfont.modules.google.FontApiUrlBuilder,
        FontApiParser = webfont.modules.google.FontApiParser;
  
    GoogleFontApi.METRICS_COMPATIBLE_FONTS = {
      "Arimo": true,
      "Cousine": true,
      "Tinos": true
    };
  
    GoogleFontApi.prototype.load = function(onReady) {
      var waiter = new StyleSheetWaiter();
      var domHelper = this.domHelper_;
      var fontApiUrlBuilder = new FontApiUrlBuilder(
          this.configuration_['api'],
          domHelper.getProtocol(),
          this.configuration_['text']
      );
      var fontFamilies = this.configuration_['families'];
      fontApiUrlBuilder.setFontFamilies(fontFamilies);
  
      var fontApiParser = new FontApiParser(fontFamilies);
      fontApiParser.parse();
  
      domHelper.loadStylesheet(fontApiUrlBuilder.build(), waiter.startWaitingLoad());
      waiter.waitWhileNeededThen(function() {
        onReady(fontApiParser.getFonts(), fontApiParser.getFontTestStrings(), GoogleFontApi.METRICS_COMPATIBLE_FONTS);
      });
    };
  });
  