File: offline_item_conversions.cc

package info (click to toggle)
chromium 138.0.7204.183-1~deb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm-proposed-updates
  • size: 6,080,960 kB
  • sloc: cpp: 34,937,079; ansic: 7,176,967; javascript: 4,110,704; python: 1,419,954; asm: 946,768; xml: 739,971; pascal: 187,324; sh: 89,623; perl: 88,663; objc: 79,944; sql: 50,304; cs: 41,786; fortran: 24,137; makefile: 21,811; php: 13,980; tcl: 13,166; yacc: 8,925; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (106 lines) | stat: -rw-r--r-- 3,637 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "components/offline_pages/core/downloads/offline_item_conversions.h"

#include "base/notreached.h"
#include "base/strings/utf_string_conversions.h"
#include "components/offline_items_collection/core/pending_state.h"
#include "components/offline_pages/core/background/save_page_request.h"
#include "components/offline_pages/core/offline_page_feature.h"
#include "components/offline_pages/core/offline_page_item.h"

using OfflineItemFilter = offline_items_collection::OfflineItemFilter;
using OfflineItemState = offline_items_collection::OfflineItemState;
using OfflineItemProgressUnit =
    offline_items_collection::OfflineItemProgressUnit;
using PendingState = offline_items_collection::PendingState;

namespace {

const std::string GetDisplayName(const offline_pages::OfflinePageItem& page) {
  if (!page.title.empty())
    return base::UTF16ToUTF8(page.title);

  std::string host = page.url.host();
  return host.empty() ? page.url.spec() : host;
}

const std::string GetDisplayName(
    const offline_pages::SavePageRequest& request) {
  std::string host = request.url().host();
  return host.empty() ? request.url().spec() : host;
}

const std::string GetMimeType() {
  return "multipart/related";
}

}  // namespace

namespace offline_pages {

OfflineItem OfflineItemConversions::CreateOfflineItem(
    const OfflinePageItem& page) {
  OfflineItem item;
  item.id = ContentId(kOfflinePageNamespace, page.client_id.id);
  item.title = GetDisplayName(page);
  item.filter = OfflineItemFilter::FILTER_PAGE;
  item.state = OfflineItemState::COMPLETE;
  item.total_size_bytes = page.file_size;
  item.received_bytes = page.file_size;
  item.creation_time = page.creation_time;
  // Completion time is the time when the offline archive was created.
  item.completion_time = page.creation_time;
  item.last_accessed_time = page.last_access_time;
  item.file_path = page.file_path;
  item.mime_type = GetMimeType();
  item.url = page.url;
  item.original_url = page.original_url_if_different;
  item.progress.value = 100;
  item.progress.max = 100;
  item.progress.unit = OfflineItemProgressUnit::PERCENTAGE;
  item.is_openable = true;
  item.externally_removed = page.file_missing_time != base::Time();
  item.description = page.snippet;
  item.attribution = page.attribution;

  // TODO(carlosk): Set item.ignore_visuals here to the right thing.
  return item;
}

OfflineItem OfflineItemConversions::CreateOfflineItem(
    const SavePageRequest& request) {
  OfflineItem item;
  item.id = ContentId(kOfflinePageNamespace, request.client_id().id);
  item.title = GetDisplayName(request);
  item.filter = OfflineItemFilter::FILTER_PAGE;
  item.creation_time = request.creation_time();
  item.total_size_bytes = -1L;
  item.received_bytes = 0;
  item.mime_type = GetMimeType();
  item.url = request.url();
  item.original_url = request.original_url();
  switch (request.request_state()) {
    case SavePageRequest::RequestState::AVAILABLE:
      item.state = OfflineItemState::PENDING;
      item.pending_state = request.pending_state();
      break;
    case SavePageRequest::RequestState::OFFLINING:
      item.state = OfflineItemState::IN_PROGRESS;
      break;
    case SavePageRequest::RequestState::PAUSED:
      item.state = OfflineItemState::PAUSED;
      break;
    default:
      NOTREACHED();
  }
  item.fail_state = request.fail_state();
  item.progress.value = 0;
  item.progress.unit = OfflineItemProgressUnit::PERCENTAGE;

  return item;
}

}  // namespace offline_pages