     (insert-file-contents
        (concat (get-chrome-root) "tools/emacs/" filename))
 
-    (trybot-fixup)))
+    (trybot-fixup type-hint)))
 
 (defun trybot-test-win ()
   "Load the Windows test data and do the trybot parse on it."
   (interactive)
-  (trybot-test "trybot-windows.txt"))
+  (trybot-test 'win "trybot-windows.txt"))
 (defun trybot-test-mac ()
   "Load the Mac test data and do the trybot parse on it."
   (interactive)
-  (trybot-test "trybot-mac.txt"))
+  (trybot-test 'mac "trybot-mac.txt"))
 (defun trybot-test-linux ()
   "Load the Linux test data and do the trybot parse on it."
   (interactive)
-  (trybot-test "trybot-linux.txt"))
+  (trybot-test 'linux "trybot-linux.txt"))
 
 (defun trybot (url)
   "Fetch a trybot URL and fix up the output into a compilation-mode buffer."

  ;; Extract the body out of the URL.
  ; TODO: delete HTTP headers somehow.
  (let ((inhibit-read-only t)
        (coding-system-for-read 'utf-8-dos))
    (switch-to-buffer (get-buffer-create "*trybot*"))
    (buffer-swap-text (url-retrieve-synchronously url))

    (trybot-fixup)))

(provide 'trybot)

                              (get-chrome-root))
        nil))))

(defun trybot-fixup-win ()
  "Fix up Windows-specific output."

  ; Fix Windows paths ("d:\...\src\").
  (save-excursion
    (while (re-search-forward "\\(^.:\\\\.*\\\\src\\\\\\)\\(.*?\\)[(:]" nil t)
      (replace-match "" nil t nil 1)
      ; Line now looks like:
      ;  foo\bar\baz.cc error message here
      ; We want to fixup backslashes in path into forward slashes,
      ; without modifying the error message - by matching up to the
      ; first colon above (which will be just beyond the end of the
      ; filename) we can use the end of the match as a limit.
      (subst-char-in-region (point) (match-end 0) ?\\ ?/)
      ; See if we can correct the file name casing.
      (let ((filename (buffer-substring (match-beginning 2) (match-end 2))))
        (if (and (not (file-exists-p filename))
                 (setq filename (case-corrected-filename filename)))
            (replace-match filename t t nil 2))))))

(defun trybot-fixup-maclin ()
  "Fix up Mac/Linux output."
  (save-excursion
    (while (re-search-forward "^/b/build/[^ ]*/src/" nil t)
      (replace-match ""))))

(defun trybot-fixup (type-hint)
  "Parse and fixup the contents of the current buffer as trybot output."

  ; XXX is there something I should so so this stuff doesn't end up on the
  ; undo stack?

  ;; Fixup paths.
  (cd (get-chrome-root))

  (goto-char (point-min))

  ;; Fix up path references.
  (cond ((eq type-hint 'win) (trybot-fixup-win))
        ((eq type-hint 'mac) (trybot-fixup-maclin))
        ((eq type-hint 'linux) (trybot-fixup-maclin))
        (t (trybot-fixup-win) (trybot-fixup-maclin)))

  (compilation-mode))

(defun trybot-test (type-hint filename)
  "Load the given test data filename and do the trybot parse on it."

  (switch-to-buffer (get-buffer-create "*trybot-test*"))
