| Index: chrome/browser/download/download_history_unittest.cc
 | 
| diff --git a/chrome/browser/download/download_history_unittest.cc b/chrome/browser/download/download_history_unittest.cc
 | 
| index 85dd1f4c1f77b4b9bd4a453d248666ad343bd007..08fa7d5fcd42e9d03b95d710817ea4c46116dd0e 100644
 | 
| --- a/chrome/browser/download/download_history_unittest.cc
 | 
| +++ b/chrome/browser/download/download_history_unittest.cc
 | 
| @@ -29,14 +29,21 @@ namespace {
 | 
|  
 | 
|  void CheckInfoEqual(const history::DownloadRow& left,
 | 
|                      const history::DownloadRow& right) {
 | 
| -  EXPECT_EQ(left.path.value(), right.path.value());
 | 
| -  EXPECT_EQ(left.url.spec(), right.url.spec());
 | 
| +  EXPECT_EQ(left.current_path.value(), right.current_path.value());
 | 
| +  EXPECT_EQ(left.target_path.value(), right.target_path.value());
 | 
| +  EXPECT_EQ(left.url_chain.size(), right.url_chain.size());
 | 
| +  for (unsigned int i = 0;
 | 
| +       i < left.url_chain.size() && i < right.url_chain.size();
 | 
| +       ++i) {
 | 
| +    EXPECT_EQ(left.url_chain[i].spec(), right.url_chain[i].spec());
 | 
| +  }
 | 
|    EXPECT_EQ(left.referrer_url.spec(), right.referrer_url.spec());
 | 
|    EXPECT_EQ(left.start_time.ToTimeT(), right.start_time.ToTimeT());
 | 
|    EXPECT_EQ(left.end_time.ToTimeT(), right.end_time.ToTimeT());
 | 
|    EXPECT_EQ(left.received_bytes, right.received_bytes);
 | 
|    EXPECT_EQ(left.total_bytes, right.total_bytes);
 | 
|    EXPECT_EQ(left.state, right.state);
 | 
| +  EXPECT_EQ(left.danger_type, right.danger_type);
 | 
|    EXPECT_EQ(left.db_handle, right.db_handle);
 | 
|    EXPECT_EQ(left.opened, right.opened);
 | 
|  }
 | 
| @@ -218,6 +225,8 @@ class DownloadHistoryTest : public testing::Test {
 | 
|    content::DownloadManager::Observer* manager_observer() {
 | 
|      return manager_observer_;
 | 
|    }
 | 
| +
 | 
| +  // Relies on the same object observing all download items.
 | 
|    void SetItemObserver(
 | 
|        content::DownloadItem::Observer* item_observer) {
 | 
|      item_observer_ = item_observer;
 | 
| @@ -234,16 +243,20 @@ class DownloadHistoryTest : public testing::Test {
 | 
|      EXPECT_CALL(manager(), RemoveObserver(_));
 | 
|      download_created_index_ = 0;
 | 
|      for (size_t index = 0; index < infos->size(); ++index) {
 | 
| -      EXPECT_CALL(manager(), CreateDownloadItem(
 | 
| -          infos->at(index).path,
 | 
| -          infos->at(index).url,
 | 
| +      content::MockDownloadManager::CreateDownloadItemAdapter adapter(
 | 
| +          infos->at(index).current_path,
 | 
| +          infos->at(index).target_path,
 | 
| +          infos->at(index).url_chain,
 | 
|            infos->at(index).referrer_url,
 | 
|            infos->at(index).start_time,
 | 
|            infos->at(index).end_time,
 | 
|            infos->at(index).received_bytes,
 | 
|            infos->at(index).total_bytes,
 | 
|            infos->at(index).state,
 | 
| -          infos->at(index).opened))
 | 
| +          infos->at(index).danger_type,
 | 
| +          infos->at(index).interrupt_reason,
 | 
| +          infos->at(index).opened);
 | 
| +      EXPECT_CALL(manager(), MockCreateDownloadItem(adapter))
 | 
|          .WillOnce(DoAll(
 | 
|              InvokeWithoutArgs(
 | 
|                  this, &DownloadHistoryTest::CallOnDownloadCreatedInOrder),
 | 
| @@ -317,16 +330,22 @@ class DownloadHistoryTest : public testing::Test {
 | 
|      history_->ExpectDownloadsRemoved(handles);
 | 
|    }
 | 
|  
 | 
| +  // Caller is responsibile for making sure reference arguments lifetime is
 | 
| +  // greater than the lifetime of the NiceMockDownloadItem() created by this
 | 
| +  // routine.
 | 
|    void InitItem(
 | 
|        int32 id,
 | 
| -      const FilePath& path,
 | 
| -      const GURL& url,
 | 
| +      const FilePath& current_path,
 | 
| +      const FilePath& target_path,
 | 
| +      const std::vector<GURL>& url_chain,
 | 
|        const GURL& referrer,
 | 
|        const base::Time& start_time,
 | 
|        const base::Time& end_time,
 | 
|        int64 received_bytes,
 | 
|        int64 total_bytes,
 | 
|        content::DownloadItem::DownloadState state,
 | 
| +      content::DownloadDangerType danger_type,
 | 
| +      content::DownloadInterruptReason interrupt_reason,
 | 
|        int64 db_handle,
 | 
|        bool opened,
 | 
|        history::DownloadRow* info) {
 | 
| @@ -335,20 +354,29 @@ class DownloadHistoryTest : public testing::Test {
 | 
|      NiceMockDownloadItem* mock_item = new NiceMockDownloadItem();
 | 
|      items_.push_back(mock_item);
 | 
|  
 | 
| -    info->path = path;
 | 
| -    info->url = url;
 | 
| +    info->current_path = current_path;
 | 
| +    info->target_path = target_path;
 | 
| +    info->url_chain = url_chain;
 | 
|      info->referrer_url = referrer;
 | 
|      info->start_time = start_time;
 | 
|      info->end_time = end_time;
 | 
|      info->received_bytes = received_bytes;
 | 
|      info->total_bytes = total_bytes;
 | 
|      info->state = state;
 | 
| +    info->danger_type = danger_type;
 | 
| +    info->interrupt_reason = interrupt_reason;
 | 
|      info->db_handle = db_handle;
 | 
|      info->opened = opened;
 | 
|  
 | 
|      EXPECT_CALL(item(index), GetId()).WillRepeatedly(Return(id));
 | 
| -    EXPECT_CALL(item(index), GetFullPath()).WillRepeatedly(ReturnRef(path));
 | 
| -    EXPECT_CALL(item(index), GetURL()).WillRepeatedly(ReturnRef(url));
 | 
| +    EXPECT_CALL(item(index),
 | 
| +                GetFullPath()).WillRepeatedly(ReturnRef(current_path));
 | 
| +    EXPECT_CALL(item(index),
 | 
| +                GetTargetFilePath()).WillRepeatedly(ReturnRef(target_path));
 | 
| +    DCHECK_LE(1u, url_chain.size());
 | 
| +    EXPECT_CALL(item(index), GetURL()).WillRepeatedly(ReturnRef(url_chain[0]));
 | 
| +    EXPECT_CALL(item(index),
 | 
| +                GetUrlChain()).WillRepeatedly(ReturnRef(url_chain));
 | 
|      EXPECT_CALL(item(index), GetMimeType()).WillRepeatedly(Return(
 | 
|          "application/octet-stream"));
 | 
|      EXPECT_CALL(item(index), GetReferrerUrl()).WillRepeatedly(ReturnRef(
 | 
| @@ -360,6 +388,10 @@ class DownloadHistoryTest : public testing::Test {
 | 
|      EXPECT_CALL(item(index), GetTotalBytes()).WillRepeatedly(Return(
 | 
|          total_bytes));
 | 
|      EXPECT_CALL(item(index), GetState()).WillRepeatedly(Return(state));
 | 
| +    EXPECT_CALL(item(index), GetDangerType())
 | 
| +        .WillRepeatedly(Return(danger_type));
 | 
| +    EXPECT_CALL(item(index), GetLastReason()).WillRepeatedly(
 | 
| +        Return(interrupt_reason));
 | 
|      EXPECT_CALL(item(index), GetOpened()).WillRepeatedly(Return(opened));
 | 
|      EXPECT_CALL(item(index), GetTargetDisposition()).WillRepeatedly(Return(
 | 
|            content::DownloadItem::TARGET_DISPOSITION_OVERWRITE));
 | 
| @@ -402,15 +434,20 @@ TEST_F(DownloadHistoryTest, DownloadHistoryTest_Load) {
 | 
|    FilePath path(FILE_PATH_LITERAL("/foo/bar.pdf"));
 | 
|    GURL url("http://example.com/bar.pdf");
 | 
|    GURL referrer("http://example.com/referrer.html");
 | 
| +  std::vector<GURL> url_chain;
 | 
| +  url_chain.push_back(url);
 | 
|    InitItem(base::RandInt(0, 1 << 20),
 | 
|             path,
 | 
| -           url,
 | 
| +           path,
 | 
| +           url_chain,
 | 
|             referrer,
 | 
|             (base::Time::Now() - base::TimeDelta::FromMinutes(10)),
 | 
|             (base::Time::Now() - base::TimeDelta::FromMinutes(1)),
 | 
|             100,
 | 
|             100,
 | 
|             content::DownloadItem::COMPLETE,
 | 
| +           content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
 | 
| +           content::DOWNLOAD_INTERRUPT_REASON_NONE,
 | 
|             base::RandInt(0, 1 << 20),
 | 
|             false,
 | 
|             &info);
 | 
| @@ -447,15 +484,20 @@ TEST_F(DownloadHistoryTest, DownloadHistoryTest_Create) {
 | 
|    FilePath path(FILE_PATH_LITERAL("/foo/bar.pdf"));
 | 
|    GURL url("http://example.com/bar.pdf");
 | 
|    GURL referrer("http://example.com/referrer.html");
 | 
| +  std::vector<GURL> url_chain;
 | 
| +  url_chain.push_back(url);
 | 
|    InitItem(base::RandInt(0, 1 << 20),
 | 
|             path,
 | 
| -           url,
 | 
| +           path,
 | 
| +           url_chain,
 | 
|             referrer,
 | 
|             (base::Time::Now() - base::TimeDelta::FromMinutes(10)),
 | 
|             (base::Time::Now() - base::TimeDelta::FromMinutes(1)),
 | 
|             100,
 | 
|             100,
 | 
|             content::DownloadItem::COMPLETE,
 | 
| +           content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
 | 
| +           content::DOWNLOAD_INTERRUPT_REASON_NONE,
 | 
|             -1,
 | 
|             false,
 | 
|             &info);
 | 
| @@ -494,15 +536,20 @@ TEST_F(DownloadHistoryTest, DownloadHistoryTest_Temporary) {
 | 
|    FilePath path(FILE_PATH_LITERAL("/foo/bar.pdf"));
 | 
|    GURL url("http://example.com/bar.pdf");
 | 
|    GURL referrer("http://example.com/referrer.html");
 | 
| +  std::vector<GURL> url_chain;
 | 
| +  url_chain.push_back(url);
 | 
|    InitItem(base::RandInt(0, 1 << 20),
 | 
|             path,
 | 
| -           url,
 | 
| +           path,
 | 
| +           url_chain,
 | 
|             referrer,
 | 
|             (base::Time::Now() - base::TimeDelta::FromMinutes(10)),
 | 
|             (base::Time::Now() - base::TimeDelta::FromMinutes(1)),
 | 
|             100,
 | 
|             100,
 | 
|             content::DownloadItem::COMPLETE,
 | 
| +           content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
 | 
| +           content::DOWNLOAD_INTERRUPT_REASON_NONE,
 | 
|             -1,
 | 
|             false,
 | 
|             &info);
 | 
| @@ -555,15 +602,20 @@ TEST_F(DownloadHistoryTest,
 | 
|    FilePath path(FILE_PATH_LITERAL("/foo/bar.pdf"));
 | 
|    GURL url("http://example.com/bar.pdf");
 | 
|    GURL referrer("http://example.com/referrer.html");
 | 
| +  std::vector<GURL> url_chain;
 | 
| +  url_chain.push_back(url);
 | 
|    InitItem(base::RandInt(0, 1 << 20),
 | 
|             path,
 | 
| -           url,
 | 
| +           path,
 | 
| +           url_chain,
 | 
|             referrer,
 | 
|             (base::Time::Now() - base::TimeDelta::FromMinutes(10)),
 | 
|             (base::Time::Now() - base::TimeDelta::FromMinutes(1)),
 | 
|             100,
 | 
|             100,
 | 
|             content::DownloadItem::COMPLETE,
 | 
| +           content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
 | 
| +           content::DOWNLOAD_INTERRUPT_REASON_NONE,
 | 
|             -1,
 | 
|             false,
 | 
|             &info);
 | 
| @@ -606,30 +658,40 @@ TEST_F(DownloadHistoryTest, DownloadHistoryTest_Multiple) {
 | 
|    FilePath path0(FILE_PATH_LITERAL("/foo/bar.pdf"));
 | 
|    GURL url0("http://example.com/bar.pdf");
 | 
|    GURL referrer0("http://example.com/referrer.html");
 | 
| +  std::vector<GURL> url0_chain;
 | 
| +  url0_chain.push_back(url0);
 | 
|    InitItem(base::RandInt(0, 1 << 10),
 | 
|             path0,
 | 
| -           url0,
 | 
| +           path0,
 | 
| +           url0_chain,
 | 
|             referrer0,
 | 
|             (base::Time::Now() - base::TimeDelta::FromMinutes(11)),
 | 
|             (base::Time::Now() - base::TimeDelta::FromMinutes(2)),
 | 
|             100,
 | 
|             100,
 | 
|             content::DownloadItem::COMPLETE,
 | 
| +           content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
 | 
| +           content::DOWNLOAD_INTERRUPT_REASON_NONE,
 | 
|             base::RandInt(0, 1 << 10),
 | 
|             false,
 | 
|             &info0);
 | 
|    FilePath path1(FILE_PATH_LITERAL("/foo/qux.pdf"));
 | 
|    GURL url1("http://example.com/qux.pdf");
 | 
|    GURL referrer1("http://example.com/referrer.html");
 | 
| +  std::vector<GURL> url1_chain;
 | 
| +  url1_chain.push_back(url0);
 | 
|    InitItem(item(0).GetId() + base::RandInt(1, 1 << 10),
 | 
|             path1,
 | 
| -           url1,
 | 
| +           path1,
 | 
| +           url1_chain,
 | 
|             referrer1,
 | 
|             (base::Time::Now() - base::TimeDelta::FromMinutes(10)),
 | 
|             (base::Time::Now() - base::TimeDelta::FromMinutes(1)),
 | 
|             200,
 | 
|             200,
 | 
|             content::DownloadItem::COMPLETE,
 | 
| +           content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
 | 
| +           content::DOWNLOAD_INTERRUPT_REASON_NONE,
 | 
|             info0.db_handle + base::RandInt(1, 1 << 10),
 | 
|             false,
 | 
|             &info1);
 | 
| @@ -664,15 +726,20 @@ TEST_F(DownloadHistoryTest, DownloadHistoryTest_CreateFailed) {
 | 
|    FilePath path(FILE_PATH_LITERAL("/foo/bar.pdf"));
 | 
|    GURL url("http://example.com/bar.pdf");
 | 
|    GURL referrer("http://example.com/referrer.html");
 | 
| +  std::vector<GURL> url_chain;
 | 
| +  url_chain.push_back(url);
 | 
|    InitItem(base::RandInt(0, 1 << 20),
 | 
|             path,
 | 
| -           url,
 | 
| +           path,
 | 
| +           url_chain,
 | 
|             referrer,
 | 
|             (base::Time::Now() - base::TimeDelta::FromMinutes(10)),
 | 
|             (base::Time::Now() - base::TimeDelta::FromMinutes(1)),
 | 
|             100,
 | 
|             100,
 | 
|             content::DownloadItem::COMPLETE,
 | 
| +           content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
 | 
| +           content::DOWNLOAD_INTERRUPT_REASON_NONE,
 | 
|             -1,
 | 
|             false,
 | 
|             &info);
 | 
| @@ -702,15 +769,20 @@ TEST_F(DownloadHistoryTest,
 | 
|    FilePath path(FILE_PATH_LITERAL("/foo/bar.pdf"));
 | 
|    GURL url("http://example.com/bar.pdf");
 | 
|    GURL referrer("http://example.com/referrer.html");
 | 
| +  std::vector<GURL> url_chain;
 | 
| +  url_chain.push_back(url);
 | 
|    InitItem(base::RandInt(0, 1 << 20),
 | 
|             path,
 | 
| -           url,
 | 
| +           path,
 | 
| +           url_chain,
 | 
|             referrer,
 | 
|             (base::Time::Now() - base::TimeDelta::FromMinutes(10)),
 | 
|             (base::Time::Now() - base::TimeDelta::FromMinutes(1)),
 | 
|             100,
 | 
|             100,
 | 
|             content::DownloadItem::COMPLETE,
 | 
| +           content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
 | 
| +           content::DOWNLOAD_INTERRUPT_REASON_NONE,
 | 
|             -1,
 | 
|             false,
 | 
|             &info);
 | 
| 
 |