Segregate UMA metrics for production scenarios from test scenarios.

Currently we separate the UMA metrics only by one category: whether the
device is in dev mode or not. In addition, we need to exclude the noise
from these two categories:
1. Most of our testing on MP-signed images which are performed
with autest.
2. All our hwlab tests run in non-dev mode but they use dev-signed images
with dev-firmware keys.

So this CL defines additional bit fields to represent these states and
if any of these three flags are set, the UMA metric is sent to a
DevModeErrorCodes bucket. Thus the NormalErrorCodes bucket will have only
the production errors and thus we can monitor more effectively.

BUG=chromium-os:37613
TEST=Updated unit tests, ran on ZGB for all scenarios.
Change-Id: Id9cce33f09d1cc50cb15e67c731f7548940cbc24
Reviewed-on: https://gerrit.chromium.org/gerrit/41103
Reviewed-by: Chris Sosa <sosa@chromium.org>
Commit-Queue: Jay Srinivasan <jaysri@chromium.org>
Tested-by: Jay Srinivasan <jaysri@chromium.org>
diff --git a/action_processor.h b/action_processor.h
index 7c425de..58616b5 100644
--- a/action_processor.h
+++ b/action_processor.h
@@ -92,13 +92,26 @@
   // TODO(jaysri): Move out all the bit masks into separate constants
   // outside the enum as part of fixing bug 34369.
   // Bit flags. Remember to update the mask below for new bits.
-  kActionCodeResumedFlag = 1 << 30,  // Set if resuming an interruped update.
-  kActionCodeBootModeFlag = 1 << 31,  // Set if boot mode not normal.
 
-  // Mask to be used to extract the actual code without the higher-order
-  // bit flags (for reporting to UMA which requires small contiguous
-  // enum values)
-  kActualCodeMask = ~(kActionCodeResumedFlag | kActionCodeBootModeFlag)
+  // Set if boot mode not normal.
+  kActionCodeDevModeFlag        = 1 << 31,
+
+  // Set if resuming an interruped update.
+  kActionCodeResumedFlag         = 1 << 30,
+
+  // Set if using a dev/test image as opposed to an MP-signed image.
+  kActionCodeTestImageFlag       = 1 << 29,
+
+  // Set if using devserver or Omaha sandbox (using crosh autest).
+  kActionCodeTestOmahaUrlFlag    = 1 << 28,
+
+  // Mask that indicates bit positions that are used to indicate special flags
+  // that are embedded in the error code to provide additional context about
+  // the system in which the error was encountered.
+  kSpecialFlags = (kActionCodeDevModeFlag |
+                   kActionCodeResumedFlag |
+                   kActionCodeTestImageFlag |
+                   kActionCodeTestOmahaUrlFlag)
 };
 
 class AbstractAction;