AU: MultiHttpFetcher cleanup/rewrite

This is the first of many CLs to cleanup/refactor/unfork the
HttpFetcher classes.

This CL changes MultiHttpFetcher to MultiRangeHTTPFetcher, makes it
work with a single base fetcher, and un-templatizes it.

Also, fix a (new?) bug in SConstruct w/ setting CCFLAGS.

TEST=unittests, tested an interrupted/resumed update on device.
BUG=10395

Review URL: http://codereview.chromium.org/5835004

Change-Id: I8422358a6d425233987dd799c5ee7c87135d85fd
diff --git a/http_fetcher_unittest.cc b/http_fetcher_unittest.cc
index a42bb3b..ccda0b6 100644
--- a/http_fetcher_unittest.cc
+++ b/http_fetcher_unittest.cc
@@ -16,10 +16,11 @@
 
 #include "update_engine/libcurl_http_fetcher.h"
 #include "update_engine/mock_http_fetcher.h"
-#include "update_engine/multi_http_fetcher.h"
+#include "update_engine/multi_range_http_fetcher.h"
 #include "update_engine/proxy_resolver.h"
 
 using std::make_pair;
+using std::pair;
 using std::string;
 using std::vector;
 
@@ -170,16 +171,16 @@
 };
 
 template <>
-class HttpFetcherTest<MultiHttpFetcher<LibcurlHttpFetcher> >
+class HttpFetcherTest<MultiRangeHTTPFetcher>
     : public HttpFetcherTest<LibcurlHttpFetcher> {
  public:
   HttpFetcher* NewLargeFetcher() {
-    MultiHttpFetcher<LibcurlHttpFetcher> *ret =
-        new MultiHttpFetcher<LibcurlHttpFetcher>(
-            reinterpret_cast<ProxyResolver*>(&proxy_resolver_));
-    MultiHttpFetcher<LibcurlHttpFetcher>::RangesVect
-        ranges(1, make_pair(0, -1));
-    ret->set_ranges(ranges);
+    ProxyResolver* resolver =
+        reinterpret_cast<ProxyResolver*>(&proxy_resolver_);
+    MultiRangeHTTPFetcher *ret =
+        new MultiRangeHTTPFetcher(new LibcurlHttpFetcher(resolver));
+    ret->ClearRanges();
+    ret->AddRange(0, -1);
     // Speed up test execution.
     ret->set_idle_seconds(1);
     ret->set_retry_seconds(1);
@@ -193,7 +194,7 @@
 
 typedef ::testing::Types<LibcurlHttpFetcher,
                          MockHttpFetcher,
-                         MultiHttpFetcher<LibcurlHttpFetcher> >
+                         MultiRangeHTTPFetcher>
 HttpFetcherTestTypes;
 TYPED_TEST_CASE(HttpFetcherTest, HttpFetcherTestTypes);
 
@@ -344,7 +345,7 @@
     callback_once_ = false;
     // |fetcher| can be destroyed during this callback.
     fetcher_.reset(NULL);
- }
+  }
   void TerminateTransfer() {
     CHECK(once_);
     once_ = false;
@@ -651,7 +652,7 @@
 
 void MultiTest(HttpFetcher* fetcher_in,
                const string& url,
-               const MultiHttpFetcher<LibcurlHttpFetcher>::RangesVect& ranges,
+               const vector<pair<off_t, off_t> >& ranges,
                const string& expected_prefix,
                off_t expected_size,
                int expected_response_code) {
@@ -660,10 +661,15 @@
     MultiHttpFetcherTestDelegate delegate(expected_response_code);
     delegate.loop_ = loop;
     delegate.fetcher_.reset(fetcher_in);
-    MultiHttpFetcher<LibcurlHttpFetcher>* multi_fetcher =
-        dynamic_cast<MultiHttpFetcher<LibcurlHttpFetcher>*>(fetcher_in);
+    MultiRangeHTTPFetcher* multi_fetcher =
+        dynamic_cast<MultiRangeHTTPFetcher*>(fetcher_in);
     ASSERT_TRUE(multi_fetcher);
-    multi_fetcher->set_ranges(ranges);
+    multi_fetcher->ClearRanges();
+    for (vector<pair<off_t, off_t> >::const_iterator it = ranges.begin(),
+             e = ranges.end(); it != e; ++it) {
+               LOG(INFO) << "Adding range";
+      multi_fetcher->AddRange(it->first, it->second);
+    }
     multi_fetcher->SetConnectionAsExpensive(false);
     multi_fetcher->SetBuildType(false);
     multi_fetcher->set_delegate(&delegate);
@@ -687,7 +693,7 @@
   typename TestFixture::HttpServer server;
   ASSERT_TRUE(server.started_);
 
-  MultiHttpFetcher<LibcurlHttpFetcher>::RangesVect ranges;
+  vector<pair<off_t, off_t> > ranges;
   ranges.push_back(make_pair(0, 25));
   ranges.push_back(make_pair(99, -1));
   MultiTest(this->NewLargeFetcher(),
@@ -704,7 +710,7 @@
   typename TestFixture::HttpServer server;
   ASSERT_TRUE(server.started_);
 
-  MultiHttpFetcher<LibcurlHttpFetcher>::RangesVect ranges;
+  vector<pair<off_t, off_t> > ranges;
   ranges.push_back(make_pair(0, 24));
   MultiTest(this->NewLargeFetcher(),
             this->BigUrl(),
@@ -720,7 +726,7 @@
   typename TestFixture::HttpServer server;
   ASSERT_TRUE(server.started_);
 
-  MultiHttpFetcher<LibcurlHttpFetcher>::RangesVect ranges;
+  vector<pair<off_t, off_t> > ranges;
   ranges.push_back(make_pair(kBigSize - 2, -1));
   ranges.push_back(make_pair(kBigSize - 3, -1));
   MultiTest(this->NewLargeFetcher(),
@@ -737,9 +743,10 @@
   typename TestFixture::HttpServer server;
   ASSERT_TRUE(server.started_);
 
-  MultiHttpFetcher<LibcurlHttpFetcher>::RangesVect ranges;
+  vector<pair<off_t, off_t> > ranges;
   ranges.push_back(make_pair(kBigSize - 2, 4));
   for (int i = 0; i < 2; ++i) {
+    LOG(INFO) << "i = " << i;
     MultiTest(this->NewLargeFetcher(),
               this->BigUrl(),
               ranges,