Chromium Code Reviews| Index: components/dom_distiller/content/distillable_page_utils.cc |
| diff --git a/components/dom_distiller/content/distillable_page_utils.cc b/components/dom_distiller/content/distillable_page_utils.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..7f1b3ccc53b470a6c2521ccf0e34eefac486231a |
| --- /dev/null |
| +++ b/components/dom_distiller/content/distillable_page_utils.cc |
| @@ -0,0 +1,74 @@ |
| +// Copyright 2015 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/dom_distiller/content/distillable_page_utils.h" |
| + |
| +#include "base/bind.h" |
| +#include "base/message_loop/message_loop.h" |
| +#include "base/strings/utf_string_conversions.h" |
| +#include "base/values.h" |
| +#include "components/dom_distiller/core/distillable_page_detector.h" |
| +#include "components/dom_distiller/core/page_features.h" |
| +#include "content/public/browser/render_frame_host.h" |
| +#include "grit/components_resources.h" |
| +#include "ui/base/resource/resource_bundle.h" |
| + |
| +namespace dom_distiller { |
| +namespace { |
| +void OnOGArticleJsResult(base::Callback<void(bool)> callback, |
| + const base::Value* result) { |
| + bool success = false; |
| + if (result) { |
| + result->GetAsBoolean(&success); |
| + } |
| + callback.Run(success); |
| +} |
| + |
| +void OnExtractFeaturesJsResult(const DistillablePageDetector* detector, |
| + base::Callback<void(bool)> callback, |
| + const base::Value* result) { |
| + callback.Run(detector->Classify(CalculateDerivedFeaturesFromJSON(result))); |
| +} |
| +} // namespace |
| + |
| +void IsOpenGraphArticle(content::WebContents* web_contents, |
| + base::Callback<void(bool)> callback) { |
| + content::RenderFrameHost* main_frame = web_contents->GetMainFrame(); |
| + if (!main_frame) { |
| + base::MessageLoop::current()->PostTask(FROM_HERE, |
| + base::Bind(callback, false)); |
| + return; |
| + } |
| + std::string og_article_js = ResourceBundle::GetSharedInstance() |
|
nyquist
2015/04/01 18:12:19
Technically IDR_IS_DISTILLABLE_JS also supports sc
cjhopman
2015/04/01 20:59:29
yeah.
|
| + .GetRawDataResource(IDR_IS_DISTILLABLE_JS) |
| + .as_string(); |
| + main_frame->ExecuteJavaScript(base::UTF8ToUTF16(og_article_js), |
| + base::Bind(OnOGArticleJsResult, callback)); |
| +} |
| + |
| +void IsDistillablePage(content::WebContents* web_contents, |
| + base::Callback<void(bool)> callback) { |
| + IsDistillablePageForDetector(web_contents, |
| + DistillablePageDetector::GetDefault(), callback); |
| +} |
| + |
| +void IsDistillablePageForDetector(content::WebContents* web_contents, |
| + const DistillablePageDetector* detector, |
| + base::Callback<void(bool)> callback) { |
| + content::RenderFrameHost* main_frame = web_contents->GetMainFrame(); |
| + if (!main_frame) { |
| + base::MessageLoop::current()->PostTask(FROM_HERE, |
| + base::Bind(callback, false)); |
| + return; |
| + } |
| + std::string extract_features_js = |
| + ResourceBundle::GetSharedInstance() |
| + .GetRawDataResource(IDR_EXTRACT_PAGE_FEATURES_JS) |
| + .as_string(); |
| + main_frame->ExecuteJavaScript( |
| + base::UTF8ToUTF16(extract_features_js), |
| + base::Bind(OnExtractFeaturesJsResult, detector, callback)); |
| +} |
| + |
| +} // namespace dom_distiller |