{"action":"created","comment":{"url":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/comments/25236759","id":25236759,"diff_hunk":"@@ -0,0 +1,367 @@\n+'use strict';\n+/**\n+ * Bluetooth2 is compatible with Bluetooth APIv2 and used to enable/\n+ * diable bluetooth hardware, get bluetooth Adapter, and check target\n+ * bluetooth profile is connected.\n+ */\n+/* global SettingsListener, Service */\n+/* exported Bluetooth2 */\n+(function(exports) {\n+\n+var Bluetooth = function() {};\n+\n+Bluetooth.prototype = {\n+  name: 'Bluetooth',\n+  /**\n+   * Keep a global connected property.\n+   *\n+   * @public\n+   */\n+  connected: false,\n+\n+  /**\n+   * Debug message.\n+   *\n+   * @type {Boolean} turn on/off the console log\n+   */\n+  _debug: false,\n+\n+  /**\n+   * Store a reference of the default adapter.\n+   *\n+   * @private\n+   */\n+  _adapter: null,\n+\n+  _attributeHandler: null,\n+\n+  /**\n+   * Store a reference of the Bluetooth API.\n+   *\n+   * @private\n+   */\n+  _bluetooth: null,\n+\n+  /**\n+   * Store a reference of the Bluetooth API.\n+   *\n+   * @private\n+   */\n+  _isEnabled: false,\n+\n+  /**\n+   * Build-in Bluetooth profiles\n+   *\n+   * @public\n+   */\n+  get Profiles() {\n+    return {\n+      HFP: 'hfp',   // Hands-Free Profile\n+      OPP: 'opp',   // Object Push Profile\n+      A2DP: 'a2dp', // A2DP status\n+      SCO: 'sco'    // Synchronous Connection-Oriented\n+    };\n+  },\n+\n+  /**\n+   * Set profile connect state.\n+   *\n+   * @public\n+   * @param {String} profile profile id\n+   * @param {Boolean} connected connect status\n+   */\n+  _setProfileConnected: function bt_setProfileConnected(profile, connected) {\n+    var value = this['_' + profile + 'Connected'];\n+    if (value !== connected) {\n+      this['_' + profile + 'Connected'] = connected;\n+\n+      // Raise an event for the profile connection changes.\n+      window.dispatchEvent(new CustomEvent('bluetoothprofileconnectionchange',\n+      {\n+        name: profile,\n+        connected: connected\n+      }));\n+      // if (profile === 'opp' && this.transferIcon) {\n+      //   this.transferIcon.update();\n+      // }\n+      // if (profile === 'a2dp' && this.headphoneIcon) {\n+      //   this.headphoneIcon.update();\n+      // }\n+    }\n+  },\n+\n+  /**\n+   * Check if bluetooth profile is connected.\n+   *\n+   * @public\n+   * @param {String} profile profile name\n+   * @return {Boolean} connected state\n+   */\n+  isProfileConnected: function bt_isProfileConnected(profile) {\n+    var isConnected = this['_' + profile + 'Connected'];\n+    if (isConnected === undefined) {\n+      return false;\n+    } else {\n+      return isConnected;\n+    }\n+  },\n+\n+  /**\n+   * Initialize bluetooth module.\n+   *\n+   * @public\n+   */\n+  start: function bt_start() {\n+    if (!window.navigator.mozSettings || !window.navigator.mozBluetooth) {\n+      return;\n+    }\n+\n+    this._bluetooth = window.navigator.mozBluetooth;\n+    SettingsListener.observe('bluetooth.enabled', true, function(value) {\n+      if (!this._bluetooth) {\n+        // roll back the setting value to notify the UIs\n+        // that Bluetooth interface is not available\n+        if (value) {\n+          SettingsListener.getSettingsLock().set({\n+            'bluetooth.enabled': false\n+          });\n+        }\n+        return;\n+      }\n+    }.bind(this));\n+\n+    this._attributeHandler = this._bluetoothAttrChangeHandler.bind(this);\n+\n+    // watch attributechanged event\n+    this._bluetooth.addEventListener('attributechanged',\n+      this._attributeHandler);\n+\n+    // clear defaultAdapter and listener once adapter is removed\n+    this._bluetooth.addEventListener('adapterremoved', () => {\n+      this._adapter = null;\n+      this._bluetooth.removeEventListener(this._attributeHandler);\n+    });\n+\n+    // if bluetooth is enabled in booting time, try to get adapter now\n+    this.debug('init bluetooth adapter');\n+    this._adapter = this._bluetooth.defaultAdapter;\n+    this._adapter.addEventListener('attributechanged',\n+      this._bluetoothAdapterAttrChangeHandler.bind(this));\n+\n+    /* In file transfering case:\n+     * since System Message can't be listened in two js files within a app,\n+     * so we listen here but dispatch events to bluetooth_transfer.js\n+     * while getting bluetooth file transfer start/complete system messages\n+     */\n+    navigator.mozSetMessageHandler('bluetooth-opp-transfer-start',\n+      this._relayMessageEvent.bind(this, 'bluetooth-opp-transfer-start')\n+    );\n+\n+    navigator.mozSetMessageHandler('bluetooth-opp-transfer-complete',\n+      this._relayMessageEvent.bind(this, 'bluetooth-opp-transfer-complete')\n+    );\n+\n+    // decouple bluetooth enable/disable function from other system part\n+    window.addEventListener('request-enable-bluetooth',\n+      this._enableHandler.bind(this));\n+    window.addEventListener('request-disable-bluetooth',\n+      this._disableHandler.bind(this));\n+\n+    Service.registerState('isEnabled', this);\n+    // LazyLoader.load(['js/bluetooth_icon.js',\n+    //                  'js/bluetooth_transfer_icon.js',\n+    //                  'js/bluetooth_headphone_icon.js'], function() {\n+    //   this.icon = new BluetoothIcon(this);\n+    //   this.icon.start();\n+    //   this.transferIcon = new BluetoothTransferIcon(this);\n+    //   this.transferIcon.start();\n+    //   this.headphoneIcon = new BluetoothHeadphoneIcon(this);\n+    //   this.headphoneIcon.start();\n+    // }.bind(this)).catch(function(err) {\n+    //   console.error(err);\n+    // });\n+  },\n+\n+  /**\n+   * update settings value and enable bluetooth hardware\n+   *\n+   * @private\n+   */\n+  _enableHandler: function bt__enableHandler() {\n+    this.debug('enable bluetooth');\n+    this.getAdapter().then((adapter) => {\n+      adapter.enable().then(() => { //resolve\n+        this._updateProfileStat(adapter);\n+        navigator.mozSettings.createLock().set({\n+          'bluetooth.enabled': true\n+        });\n+      }, () => { //reject\n+        this.debug('can not get bluetooth adapter');\n+      });\n+    });\n+  },\n+\n+  /**\n+   * update settings value and disable bluetooth hardware\n+   *\n+   * @private\n+   */\n+  _disableHandler: function bt__enableHandler() {\n+    this.debug('bluetooth settings disabled');\n+    this.getAdapter().then((adapter) => {\n+      adapter.disable().then(() => { //resolve\n+        navigator.mozSettings.createLock().set({\n+          'bluetooth.enabled': false\n+        });\n+      }, () => { //reject\n+        this.debug('can not get bluetooth adapter');\n+      });\n+    });\n+  },\n+\n+  /**\n+   * Dispatch events to bluetooth_transfer.js.\n+   * while getting bluetooth file transfer start/complete system messages\n+   *\n+   * @private\n+   * @param  {String} msg message\n+   * @param  {Object} transferInfo relayed info\n+   */\n+  _relayMessageEvent: function bt__relayMessageEvent(msg, transferInfo) {\n+    this._setProfileConnected(this.Profiles.OPP, true);\n+    var evt = document.createEvent('CustomEvent');\n+    evt.initCustomEvent(msg,\n+      /* canBubble */ true, /* cancelable */ false,\n+      {transferInfo: transferInfo});\n+    window.dispatchEvent(evt);\n+  },\n+\n+  /**\n+   * Maintain connect stat of supported profiles.\n+   *\n+   * @private\n+   * @param  {Object} adapter bluetooth adapter\n+   */\n+  _updateProfileStat: function bt_updateProfileStat(adapter) {","path":"apps/system/js/bluetooth_v2.js","position":251,"original_position":245,"commit_id":"33308f1bbf7e8d78609a476c7856e76e8ab0a0c6","original_commit_id":"67df3320895471fbdb8d8326ec357e3c0c8e57cd","user":{"login":"ian-liu","id":1704655,"avatar_url":"https://avatars.githubusercontent.com/u/1704655?v=3","gravatar_id":"","url":"https://api.github.com/users/ian-liu","html_url":"https://github.com/ian-liu","followers_url":"https://api.github.com/users/ian-liu/followers","following_url":"https://api.github.com/users/ian-liu/following{/other_user}","gists_url":"https://api.github.com/users/ian-liu/gists{/gist_id}","starred_url":"https://api.github.com/users/ian-liu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ian-liu/subscriptions","organizations_url":"https://api.github.com/users/ian-liu/orgs","repos_url":"https://api.github.com/users/ian-liu/repos","events_url":"https://api.github.com/users/ian-liu/events{/privacy}","received_events_url":"https://api.github.com/users/ian-liu/received_events","type":"User","site_admin":false},"body":"nit in function name: `_updateProfileState`","created_at":"2015-02-24T08:58:24Z","updated_at":"2015-02-24T08:58:24Z","html_url":"https://github.com/mozilla-b2g/gaia/pull/27905#discussion_r25236759","pull_request_url":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/27905","_links":{"self":{"href":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/comments/25236759"},"html":{"href":"https://github.com/mozilla-b2g/gaia/pull/27905#discussion_r25236759"},"pull_request":{"href":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/27905"}}},"pull_request":{"url":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/27905","id":28623199,"html_url":"https://github.com/mozilla-b2g/gaia/pull/27905","diff_url":"https://github.com/mozilla-b2g/gaia/pull/27905.diff","patch_url":"https://github.com/mozilla-b2g/gaia/pull/27905.patch","issue_url":"https://api.github.com/repos/mozilla-b2g/gaia/issues/27905","number":27905,"state":"open","locked":false,"title":"Bug 1128812 - [Statusbar][Bluetooth] dispatch proper bluetooth events","user":{"login":"gasolin","id":748808,"avatar_url":"https://avatars.githubusercontent.com/u/748808?v=3","gravatar_id":"","url":"https://api.github.com/users/gasolin","html_url":"https://github.com/gasolin","followers_url":"https://api.github.com/users/gasolin/followers","following_url":"https://api.github.com/users/gasolin/following{/other_user}","gists_url":"https://api.github.com/users/gasolin/gists{/gist_id}","starred_url":"https://api.github.com/users/gasolin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gasolin/subscriptions","organizations_url":"https://api.github.com/users/gasolin/orgs","repos_url":"https://api.github.com/users/gasolin/repos","events_url":"https://api.github.com/users/gasolin/events{/privacy}","received_events_url":"https://api.github.com/users/gasolin/received_events","type":"User","site_admin":false},"body":"* rename `bluetooth-adapter-added` to `bluetooth-enabled` to denote proper event naming\r\n* update settings value and enable bluetooth hardware with new bluetooth v2 module\r\n* add debug flag in Bluetooth2 to print console log\r\n* listen Bluetooth adapterremoved event instead of disable event ( disable event is removed in BTv2)\r\n* Lazyload  and make Bluetooth instanciable\r\n* unit test with 79% coverage\r\n* quick settings interoperation with settings works","created_at":"2015-02-04T09:19:47Z","updated_at":"2015-02-24T08:58:24Z","closed_at":null,"merged_at":null,"merge_commit_sha":"09a4725be0c72e423fc2346d0b744134e2073094","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/27905/commits","review_comments_url":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/27905/comments","review_comment_url":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/comments{/number}","comments_url":"https://api.github.com/repos/mozilla-b2g/gaia/issues/27905/comments","statuses_url":"https://api.github.com/repos/mozilla-b2g/gaia/statuses/33308f1bbf7e8d78609a476c7856e76e8ab0a0c6","head":{"label":"gasolin:issue-1128812","ref":"issue-1128812","sha":"33308f1bbf7e8d78609a476c7856e76e8ab0a0c6","user":{"login":"gasolin","id":748808,"avatar_url":"https://avatars.githubusercontent.com/u/748808?v=3","gravatar_id":"","url":"https://api.github.com/users/gasolin","html_url":"https://github.com/gasolin","followers_url":"https://api.github.com/users/gasolin/followers","following_url":"https://api.github.com/users/gasolin/following{/other_user}","gists_url":"https://api.github.com/users/gasolin/gists{/gist_id}","starred_url":"https://api.github.com/users/gasolin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gasolin/subscriptions","organizations_url":"https://api.github.com/users/gasolin/orgs","repos_url":"https://api.github.com/users/gasolin/repos","events_url":"https://api.github.com/users/gasolin/events{/privacy}","received_events_url":"https://api.github.com/users/gasolin/received_events","type":"User","site_admin":false},"repo":{"id":8349595,"name":"gaia","full_name":"gasolin/gaia","owner":{"login":"gasolin","id":748808,"avatar_url":"https://avatars.githubusercontent.com/u/748808?v=3","gravatar_id":"","url":"https://api.github.com/users/gasolin","html_url":"https://github.com/gasolin","followers_url":"https://api.github.com/users/gasolin/followers","following_url":"https://api.github.com/users/gasolin/following{/other_user}","gists_url":"https://api.github.com/users/gasolin/gists{/gist_id}","starred_url":"https://api.github.com/users/gasolin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gasolin/subscriptions","organizations_url":"https://api.github.com/users/gasolin/orgs","repos_url":"https://api.github.com/users/gasolin/repos","events_url":"https://api.github.com/users/gasolin/events{/privacy}","received_events_url":"https://api.github.com/users/gasolin/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/gasolin/gaia","description":"Gaia is a HTML5-based Phone UI for the Boot 2 Gecko Project. NOTE: For details of what branches are used for what releases, see https://wiki.mozilla.org/Release_Management/B2G_Landing","fork":true,"url":"https://api.github.com/repos/gasolin/gaia","forks_url":"https://api.github.com/repos/gasolin/gaia/forks","keys_url":"https://api.github.com/repos/gasolin/gaia/keys{/key_id}","collaborators_url":"https://api.github.com/repos/gasolin/gaia/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/gasolin/gaia/teams","hooks_url":"https://api.github.com/repos/gasolin/gaia/hooks","issue_events_url":"https://api.github.com/repos/gasolin/gaia/issues/events{/number}","events_url":"https://api.github.com/repos/gasolin/gaia/events","assignees_url":"https://api.github.com/repos/gasolin/gaia/assignees{/user}","branches_url":"https://api.github.com/repos/gasolin/gaia/branches{/branch}","tags_url":"https://api.github.com/repos/gasolin/gaia/tags","blobs_url":"https://api.github.com/repos/gasolin/gaia/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/gasolin/gaia/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/gasolin/gaia/git/refs{/sha}","trees_url":"https://api.github.com/repos/gasolin/gaia/git/trees{/sha}","statuses_url":"https://api.github.com/repos/gasolin/gaia/statuses/{sha}","languages_url":"https://api.github.com/repos/gasolin/gaia/languages","stargazers_url":"https://api.github.com/repos/gasolin/gaia/stargazers","contributors_url":"https://api.github.com/repos/gasolin/gaia/contributors","subscribers_url":"https://api.github.com/repos/gasolin/gaia/subscribers","subscription_url":"https://api.github.com/repos/gasolin/gaia/subscription","commits_url":"https://api.github.com/repos/gasolin/gaia/commits{/sha}","git_commits_url":"https://api.github.com/repos/gasolin/gaia/git/commits{/sha}","comments_url":"https://api.github.com/repos/gasolin/gaia/comments{/number}","issue_comment_url":"https://api.github.com/repos/gasolin/gaia/issues/comments{/number}","contents_url":"https://api.github.com/repos/gasolin/gaia/contents/{+path}","compare_url":"https://api.github.com/repos/gasolin/gaia/compare/{base}...{head}","merges_url":"https://api.github.com/repos/gasolin/gaia/merges","archive_url":"https://api.github.com/repos/gasolin/gaia/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/gasolin/gaia/downloads","issues_url":"https://api.github.com/repos/gasolin/gaia/issues{/number}","pulls_url":"https://api.github.com/repos/gasolin/gaia/pulls{/number}","milestones_url":"https://api.github.com/repos/gasolin/gaia/milestones{/number}","notifications_url":"https://api.github.com/repos/gasolin/gaia/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/gasolin/gaia/labels{/name}","releases_url":"https://api.github.com/repos/gasolin/gaia/releases{/id}","created_at":"2013-02-22T03:20:25Z","updated_at":"2015-02-24T07:32:18Z","pushed_at":"2015-02-24T08:31:58Z","git_url":"git://github.com/gasolin/gaia.git","ssh_url":"git@github.com:gasolin/gaia.git","clone_url":"https://github.com/gasolin/gaia.git","svn_url":"https://github.com/gasolin/gaia","homepage":"https://wiki.mozilla.org/B2G","size":893033,"stargazers_count":1,"watchers_count":1,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"mozilla-b2g:master","ref":"master","sha":"5943cf88a468a2220df3ba0449c99e8ac154f5c1","user":{"login":"mozilla-b2g","id":1261292,"avatar_url":"https://avatars.githubusercontent.com/u/1261292?v=3","gravatar_id":"","url":"https://api.github.com/users/mozilla-b2g","html_url":"https://github.com/mozilla-b2g","followers_url":"https://api.github.com/users/mozilla-b2g/followers","following_url":"https://api.github.com/users/mozilla-b2g/following{/other_user}","gists_url":"https://api.github.com/users/mozilla-b2g/gists{/gist_id}","starred_url":"https://api.github.com/users/mozilla-b2g/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mozilla-b2g/subscriptions","organizations_url":"https://api.github.com/users/mozilla-b2g/orgs","repos_url":"https://api.github.com/users/mozilla-b2g/repos","events_url":"https://api.github.com/users/mozilla-b2g/events{/privacy}","received_events_url":"https://api.github.com/users/mozilla-b2g/received_events","type":"Organization","site_admin":false},"repo":{"id":2317369,"name":"gaia","full_name":"mozilla-b2g/gaia","owner":{"login":"mozilla-b2g","id":1261292,"avatar_url":"https://avatars.githubusercontent.com/u/1261292?v=3","gravatar_id":"","url":"https://api.github.com/users/mozilla-b2g","html_url":"https://github.com/mozilla-b2g","followers_url":"https://api.github.com/users/mozilla-b2g/followers","following_url":"https://api.github.com/users/mozilla-b2g/following{/other_user}","gists_url":"https://api.github.com/users/mozilla-b2g/gists{/gist_id}","starred_url":"https://api.github.com/users/mozilla-b2g/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mozilla-b2g/subscriptions","organizations_url":"https://api.github.com/users/mozilla-b2g/orgs","repos_url":"https://api.github.com/users/mozilla-b2g/repos","events_url":"https://api.github.com/users/mozilla-b2g/events{/privacy}","received_events_url":"https://api.github.com/users/mozilla-b2g/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/mozilla-b2g/gaia","description":"Gaia is a HTML5-based Phone UI for the Boot 2 Gecko Project. NOTE: For details of what branches are used for what releases, see","fork":false,"url":"https://api.github.com/repos/mozilla-b2g/gaia","forks_url":"https://api.github.com/repos/mozilla-b2g/gaia/forks","keys_url":"https://api.github.com/repos/mozilla-b2g/gaia/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mozilla-b2g/gaia/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mozilla-b2g/gaia/teams","hooks_url":"https://api.github.com/repos/mozilla-b2g/gaia/hooks","issue_events_url":"https://api.github.com/repos/mozilla-b2g/gaia/issues/events{/number}","events_url":"https://api.github.com/repos/mozilla-b2g/gaia/events","assignees_url":"https://api.github.com/repos/mozilla-b2g/gaia/assignees{/user}","branches_url":"https://api.github.com/repos/mozilla-b2g/gaia/branches{/branch}","tags_url":"https://api.github.com/repos/mozilla-b2g/gaia/tags","blobs_url":"https://api.github.com/repos/mozilla-b2g/gaia/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mozilla-b2g/gaia/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mozilla-b2g/gaia/git/refs{/sha}","trees_url":"https://api.github.com/repos/mozilla-b2g/gaia/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mozilla-b2g/gaia/statuses/{sha}","languages_url":"https://api.github.com/repos/mozilla-b2g/gaia/languages","stargazers_url":"https://api.github.com/repos/mozilla-b2g/gaia/stargazers","contributors_url":"https://api.github.com/repos/mozilla-b2g/gaia/contributors","subscribers_url":"https://api.github.com/repos/mozilla-b2g/gaia/subscribers","subscription_url":"https://api.github.com/repos/mozilla-b2g/gaia/subscription","commits_url":"https://api.github.com/repos/mozilla-b2g/gaia/commits{/sha}","git_commits_url":"https://api.github.com/repos/mozilla-b2g/gaia/git/commits{/sha}","comments_url":"https://api.github.com/repos/mozilla-b2g/gaia/comments{/number}","issue_comment_url":"https://api.github.com/repos/mozilla-b2g/gaia/issues/comments{/number}","contents_url":"https://api.github.com/repos/mozilla-b2g/gaia/contents/{+path}","compare_url":"https://api.github.com/repos/mozilla-b2g/gaia/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mozilla-b2g/gaia/merges","archive_url":"https://api.github.com/repos/mozilla-b2g/gaia/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mozilla-b2g/gaia/downloads","issues_url":"https://api.github.com/repos/mozilla-b2g/gaia/issues{/number}","pulls_url":"https://api.github.com/repos/mozilla-b2g/gaia/pulls{/number}","milestones_url":"https://api.github.com/repos/mozilla-b2g/gaia/milestones{/number}","notifications_url":"https://api.github.com/repos/mozilla-b2g/gaia/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mozilla-b2g/gaia/labels{/name}","releases_url":"https://api.github.com/repos/mozilla-b2g/gaia/releases{/id}","created_at":"2011-09-03T01:38:46Z","updated_at":"2015-02-24T08:19:30Z","pushed_at":"2015-02-24T08:19:30Z","git_url":"git://github.com/mozilla-b2g/gaia.git","ssh_url":"git@github.com:mozilla-b2g/gaia.git","clone_url":"https://github.com/mozilla-b2g/gaia.git","svn_url":"https://github.com/mozilla-b2g/gaia","homepage":"https://wiki.mozilla.org/B2G","size":1427788,"stargazers_count":1874,"watchers_count":1874,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":2230,"mirror_url":null,"open_issues_count":908,"forks":2230,"open_issues":908,"watchers":1874,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/27905"},"html":{"href":"https://github.com/mozilla-b2g/gaia/pull/27905"},"issue":{"href":"https://api.github.com/repos/mozilla-b2g/gaia/issues/27905"},"comments":{"href":"https://api.github.com/repos/mozilla-b2g/gaia/issues/27905/comments"},"review_comments":{"href":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/27905/comments"},"review_comment":{"href":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/27905/commits"},"statuses":{"href":"https://api.github.com/repos/mozilla-b2g/gaia/statuses/33308f1bbf7e8d78609a476c7856e76e8ab0a0c6"}}}}