Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5260)

Unified Diff: chrome/common/extensions/docs/examples/extensions/buildbot/bg.js

Issue 18401004: Continuously update status in the buildbot extension popup window (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add copyright Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/common/extensions/docs/examples/extensions/buildbot/bg.js
diff --git a/chrome/common/extensions/docs/examples/extensions/buildbot/bg.js b/chrome/common/extensions/docs/examples/extensions/buildbot/bg.js
index b5111f53a6f454fc202ba47ba7dc0f7ded20a006..c9f21b8d390193199c262242b973b747f45d626c 100644
--- a/chrome/common/extensions/docs/examples/extensions/buildbot/bg.js
+++ b/chrome/common/extensions/docs/examples/extensions/buildbot/bg.js
@@ -7,13 +7,15 @@
// Notification object when event pages get reloaded. See
// http://crbug.com/165276.
+(function() {
+
var statusURL = "http://chromium-status.appspot.com/current?format=raw";
var statusHistoryURL =
"http://chromium-status.appspot.com/allstatus?limit=20&format=json";
var pollFrequencyInMs = 30000;
var tryPollFrequencyInMs = 30000;
-var prefs = new Prefs;
+var prefs = new buildbot.PrefStore;
function updateBadgeOnErrorStatus() {
chrome.browserAction.setBadgeText({text:"?"});
@@ -33,7 +35,7 @@ function notifyStatusChange(treeState, status) {
// The type parameter should be "open", "closed", or "throttled".
function getLastStatusTime(callback, type) {
- requestURL(statusHistoryURL, "text", function(text) {
+ buildbot.requestURL(statusHistoryURL, "text", function(text) {
var entries = JSON.parse(text);
for (var i = 0; i < entries.length; i++) {
@@ -115,88 +117,141 @@ function updateStatus(status) {
}
function requestStatus() {
- requestURL(statusURL, "text", updateStatus, updateBadgeOnErrorStatus);
+ buildbot.requestURL(statusURL,
+ "text",
+ updateStatus,
+ updateBadgeOnErrorStatus);
setTimeout(requestStatus, pollFrequencyInMs);
}
-var activeIssues = {};
// Record of the last defunct build number we're aware of on each builder. If
// the build number is less than or equal to this number, the buildbot
// information is not available and a request will return a 404.
var lastDefunctTryJob = {};
-function fetchTryJobResults(fullPatchset, builder, buildnumber) {
+function fetchTryJobResults(fullPatchset, builder, buildnumber, completed) {
var tryJobURL =
"http://build.chromium.org/p/tryserver.chromium/json/builders/" +
builder + "/builds/" + buildnumber;
if (lastDefunctTryJob.hasOwnProperty(builder) &&
- buildnumber <= lastDefunctTryJob[builder])
+ buildnumber <= lastDefunctTryJob[builder]) {
+ completed();
return;
+ }
- var onStatusError = function(status) {
- if (status == 404)
- lastDefunctTryJob[builder] = buildnumber;
- };
-
- requestURL(tryJobURL, "json", function(tryJobResult) {
+ buildbot.requestURL(tryJobURL, "json", function(tryJobResult) {
if (!fullPatchset.full_try_job_results)
fullPatchset.full_try_job_results = {};
var key = builder + "-" + buildnumber;
fullPatchset.full_try_job_results[key] = tryJobResult;
- }, onStatusError);
+
+ completed();
+ }, function(errorStatus) {
+ if (errorStatus == 404) {
+ lastDefunctTryJob[builder] =
+ Math.max(lastDefunctTryJob[builder] || 0, buildnumber);
+ }
+ completed();
+ });
}
-function fetchPatches(issue, completed) {
+// Enums corresponding to how much state has been loaded for an issue.
+var PATCHES_COMPLETE = 0;
+var TRY_JOBS_COMPLETE = 1;
+
+function fetchPatches(issue, updatedCallback) {
+ // Notify updated once after receiving all patchsets, and a second time after
+ // receiving all try job results.
var patchsetsRetrieved = 0;
+ var tryJobResultsOutstanding = 0;
issue.patchsets.forEach(function(patchset) {
var patchURL = "https://codereview.chromium.org/api/" + issue.issue +
"/" + patchset;
- requestURL(patchURL, "json", function(patch) {
+ buildbot.requestURL(patchURL, "json", function(patch) {
if (!issue.full_patchsets)
issue.full_patchsets = {};
issue.full_patchsets[patch.patchset] = patch;
patch.try_job_results.forEach(function(results) {
- if (results.buildnumber)
- fetchTryJobResults(patch, results.builder, results.buildnumber);
+ if (results.buildnumber) {
+ tryJobResultsOutstanding++;
+
+ fetchTryJobResults(patch, results.builder, results.buildnumber,
+ function() {
+ if (--tryJobResultsOutstanding == 0)
+ updatedCallback(TRY_JOBS_COMPLETE);
+ });
+ }
});
if (++patchsetsRetrieved == issue.patchsets.length)
- completed(issue);
+ updatedCallback(PATCHES_COMPLETE);
});
});
}
function updateTryStatus(status) {
var seen = {};
+ var activeIssues = buildbot.getActiveIssues();
status.results.forEach(function(result) {
var issueURL = "https://codereview.chromium.org/api/" + result.issue;
- requestURL(issueURL, "json", function(issue) {
- fetchPatches(issue, function() {activeIssues[issue.issue] = issue;});
+ buildbot.requestURL(issueURL, "json", function(issue) {
+ fetchPatches(issue, function(state) {
+ // If the issue already exists, wait until all the issue state has
+ // loaded before updating the issue so we don't lose try job information
+ // from the display.
+ if (activeIssues.getIssue(issue.issue)) {
+ if (state == TRY_JOBS_COMPLETE)
+ activeIssues.updateIssue(issue);
+ } else {
+ activeIssues.updateIssue(issue);
+ }
+ });
});
seen[result.issue] = true;
});
- for (var issue in activeIssues)
- if (!seen[issue])
- delete activeIssues[issue];
+ activeIssues.forEach(function(issue) {
+ if (!seen[issue.issue])
+ activeIssues.removeIssue(issue);
+ });
+}
+
+function fetchTryStatus(username) {
+ if (!username)
+ return;
+
+ var url = "https://codereview.chromium.org/search" +
+ // commit=2 is CLs with commit bit set, commit=3 is CLs with commit
+ // bit cleared, commit=1 is either.
+ "?closed=3&commit=1&limit=100&order=-modified&format=json&owner=" +
+ username.trim();
+ buildbot.requestURL(url, "json", updateTryStatus);
}
function requestTryStatus() {
+ var searchBaseURL = "https://codereview.chromium.org/search";
+
prefs.getTryJobUsername(function(username) {
- if (username) {
- var url = "https://codereview.chromium.org/search" +
- // commit=2 is CLs with commit bit set, commit=3 is CLs with commit
- // bit cleared, commit=1 is either.
- "?closed=3&commit=1&limit=100&order=-modified&format=json&owner=" +
- username;
- requestURL(url, "json", updateTryStatus);
+ if (username == null) {
+ var usernameScrapingURL = "https://codereview.chromium.org/search";
+ // Try scraping username from Rietveld if unset.
+ buildbot.requestURL(usernameScrapingURL, "text", function(text) {
+ var match = /([^<>\s]+@\S+)\s+\(.+\)/.exec(text);
+ if (match) {
+ username = match[1];
+ prefs.setTryJobUsername(username);
+ fetchTryStatus(username);
+ }
+ });
+ } else {
+ fetchTryStatus(username);
}
setTimeout(requestTryStatus, tryPollFrequencyInMs);
@@ -209,3 +264,5 @@ function main() {
}
main();
+
+})();

Powered by Google App Engine
This is Rietveld 408576698