AU: Implement server-dictated poll interval.

The server will need to include a PollInterval XML attribute in its
update check response. The requested interval is in seconds.

BUG=5984
TEST=unit tests, gmerged on device and tested with a modified dev server

Change-Id: I89d13f9f85d93bc141b74ae677cca813e3364fb5

Review URL: http://codereview.chromium.org/3275006
diff --git a/update_check_scheduler_unittest.cc b/update_check_scheduler_unittest.cc
index 413453a..3aea760 100644
--- a/update_check_scheduler_unittest.cc
+++ b/update_check_scheduler_unittest.cc
@@ -48,6 +48,7 @@
     EXPECT_FALSE(scheduler_.enabled_);
     EXPECT_FALSE(scheduler_.scheduled_);
     EXPECT_EQ(0, scheduler_.last_interval_);
+    EXPECT_EQ(0, scheduler_.poll_interval_);
   }
 
   virtual void TearDown() {
@@ -90,13 +91,42 @@
   EXPECT_EQ(2 * last_interval, fuzz);
 
   attempter_.set_http_response_code(503);
-  last_interval = UpdateCheckScheduler::kTimeoutMaxBackoff / 2 + 1;
-  scheduler_.last_interval_ = last_interval;
+  scheduler_.last_interval_ = UpdateCheckScheduler::kTimeoutMaxBackoff / 2 + 1;
   scheduler_.ComputeNextIntervalAndFuzz(&interval, &fuzz);
   EXPECT_EQ(UpdateCheckScheduler::kTimeoutMaxBackoff, interval);
   EXPECT_EQ(UpdateCheckScheduler::kTimeoutMaxBackoff, fuzz);
 }
 
+TEST_F(UpdateCheckSchedulerTest, ComputeNextIntervalAndFuzzPollTest) {
+  int interval, fuzz;
+  int poll_interval = UpdateCheckScheduler::kTimeoutPeriodic + 50;
+  scheduler_.set_poll_interval(poll_interval);
+  scheduler_.ComputeNextIntervalAndFuzz(&interval, &fuzz);
+  EXPECT_EQ(poll_interval, interval);
+  EXPECT_EQ(poll_interval, fuzz);
+
+  scheduler_.set_poll_interval(UpdateCheckScheduler::kTimeoutMaxBackoff + 1);
+  scheduler_.ComputeNextIntervalAndFuzz(&interval, &fuzz);
+  EXPECT_EQ(UpdateCheckScheduler::kTimeoutMaxBackoff, interval);
+  EXPECT_EQ(UpdateCheckScheduler::kTimeoutMaxBackoff, fuzz);
+
+  scheduler_.set_poll_interval(UpdateCheckScheduler::kTimeoutPeriodic - 1);
+  scheduler_.ComputeNextIntervalAndFuzz(&interval, &fuzz);
+  EXPECT_EQ(UpdateCheckScheduler::kTimeoutPeriodic, interval);
+  EXPECT_EQ(UpdateCheckScheduler::kTimeoutRegularFuzz, fuzz);
+}
+
+TEST_F(UpdateCheckSchedulerTest, ComputeNextIntervalAndFuzzPriorityTest) {
+  int interval, fuzz;
+  attempter_.set_http_response_code(500);
+  scheduler_.last_interval_ = UpdateCheckScheduler::kTimeoutPeriodic + 50;
+  int poll_interval = UpdateCheckScheduler::kTimeoutPeriodic + 100;
+  scheduler_.set_poll_interval(poll_interval);
+  scheduler_.ComputeNextIntervalAndFuzz(&interval, &fuzz);
+  EXPECT_EQ(poll_interval, interval);
+  EXPECT_EQ(poll_interval, fuzz);
+}
+
 TEST_F(UpdateCheckSchedulerTest, ComputeNextIntervalAndFuzzTest) {
   int interval, fuzz;
   scheduler_.ComputeNextIntervalAndFuzz(&interval, &fuzz);