Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(701)

Unified Diff: components/machine_intelligence/ranker_url_fetcher.cc

Issue 2925733002: Move ranker_model_loader to a new component. (Closed)
Patch Set: Adressing sdefresne's comments. Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/machine_intelligence/ranker_url_fetcher.h ('k') | components/translate/core/browser/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/machine_intelligence/ranker_url_fetcher.cc
diff --git a/components/machine_intelligence/ranker_url_fetcher.cc b/components/machine_intelligence/ranker_url_fetcher.cc
new file mode 100644
index 0000000000000000000000000000000000000000..965d716d76b1e1b55389b82b0f9a317e4193f940
--- /dev/null
+++ b/components/machine_intelligence/ranker_url_fetcher.cc
@@ -0,0 +1,109 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/machine_intelligence/ranker_url_fetcher.h"
+
+#include "base/memory/ref_counted.h"
+#include "components/data_use_measurement/core/data_use_user_data.h"
+#include "net/base/load_flags.h"
+#include "net/http/http_status_code.h"
+#include "net/traffic_annotation/network_traffic_annotation.h"
+#include "net/url_request/url_fetcher.h"
+#include "net/url_request/url_request_status.h"
+
+namespace machine_intelligence {
+
+namespace {
+
+// Retry parameter for fetching.
+const int kMaxRetry = 16;
+
+} // namespace
+
+RankerURLFetcher::RankerURLFetcher() : state_(IDLE), retry_count_(0) {}
+
+RankerURLFetcher::~RankerURLFetcher() {}
+
+bool RankerURLFetcher::Request(
+ const GURL& url,
+ const RankerURLFetcher::Callback& callback,
+ net::URLRequestContextGetter* request_context_getter) {
+ // This function is not supposed to be called if the previous operation is not
+ // finished.
+ if (state_ == REQUESTING) {
+ NOTREACHED();
+ return false;
+ }
+
+ if (retry_count_ >= kMaxRetry)
+ return false;
+ retry_count_++;
+
+ state_ = REQUESTING;
+ url_ = url;
+ callback_ = callback;
+
+ if (request_context_getter == nullptr)
+ return false;
+
+ net::NetworkTrafficAnnotationTag traffic_annotation =
+ net::DefineNetworkTrafficAnnotation("ranker_url_fetcher", R"(
+ semantics {
+ sender: "AssistRanker"
+ description:
+ "Chrome can provide a better UI experience by using machine "
+ "learning models to determine if we should show you or not an "
+ "assist prompt. For instance, Chrome may use features such as "
+ "the detected language of the current page and the past "
+ "interaction with the TransalteUI to decide whether or not we "
+ "should offer you to translate this page. Google returns "
+ "trained machine learning models that will be used to take "
+ "such decision."
+ trigger:
+ "At startup."
+ data:
+ "Path to a model. No user data is included."
+ destination: GOOGLE_OWNED_SERVICE
+ }
+ policy {
+ cookies_allowed: false
+ setting:
+ "NA"
+ })");
+ // Create and initialize the URL fetcher.
+ fetcher_ = net::URLFetcher::Create(url_, net::URLFetcher::GET, this,
+ traffic_annotation);
+ data_use_measurement::DataUseUserData::AttachToFetcher(
+ fetcher_.get(),
+ data_use_measurement::DataUseUserData::MACHINE_INTELLIGENCE);
+ fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
+ net::LOAD_DO_NOT_SAVE_COOKIES);
+ fetcher_->SetRequestContext(request_context_getter);
+
+ // Set retry parameter for HTTP status code 5xx. This doesn't work against
+ // 106 (net::ERR_INTERNET_DISCONNECTED) and so on.
+ fetcher_->SetMaxRetriesOn5xx(max_retry_on_5xx_);
+ fetcher_->Start();
+
+ return true;
+}
+
+void RankerURLFetcher::OnURLFetchComplete(const net::URLFetcher* source) {
+ DCHECK(fetcher_.get() == source);
+
+ std::string data;
+ if (source->GetStatus().status() == net::URLRequestStatus::SUCCESS &&
+ source->GetResponseCode() == net::HTTP_OK) {
+ state_ = COMPLETED;
+ source->GetResponseAsString(&data);
+ } else {
+ state_ = FAILED;
+ }
+
+ // Transfer URLFetcher's ownership before invoking a callback.
+ std::unique_ptr<const net::URLFetcher> delete_ptr(fetcher_.release());
+ callback_.Run(state_ == COMPLETED, data);
+}
+
+} // namespace machine_intelligence
« no previous file with comments | « components/machine_intelligence/ranker_url_fetcher.h ('k') | components/translate/core/browser/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698