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

Unified Diff: ios/chrome/browser/ui/reader_mode/reader_mode_checker.h

Issue 2589583003: Upstream Chrome on iOS source code [7/11]. (Closed)
Patch Set: Created 4 years 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
Index: ios/chrome/browser/ui/reader_mode/reader_mode_checker.h
diff --git a/ios/chrome/browser/ui/reader_mode/reader_mode_checker.h b/ios/chrome/browser/ui/reader_mode/reader_mode_checker.h
new file mode 100644
index 0000000000000000000000000000000000000000..bb715a94a951e4b31b74852b6c5562658af53a54
--- /dev/null
+++ b/ios/chrome/browser/ui/reader_mode/reader_mode_checker.h
@@ -0,0 +1,78 @@
+// 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.
+
+#ifndef IOS_CHROME_BROWSER_UI_READER_MODE_READER_MODE_CHECKER_H_
+#define IOS_CHROME_BROWSER_UI_READER_MODE_READER_MODE_CHECKER_H_
+
+#import <Foundation/Foundation.h>
+
+#include "base/memory/weak_ptr.h"
+#include "base/observer_list.h"
+#include "ios/web/public/web_state/web_state_observer.h"
+
+namespace web {
+class WebState;
+}
+
+class ReaderModeChecker;
+
+@class CRWJSInjectionReceiver;
+
+class ReaderModeCheckerObserver {
+ public:
+ explicit ReaderModeCheckerObserver(ReaderModeChecker* readerModeChecker);
+ virtual ~ReaderModeCheckerObserver();
+
+ // Called when the content of the page is known to be distillable.
+ virtual void PageIsDistillable() = 0;
+
+ // Invoked when the ReaderModeChecker is being destroyed. Gives subclasses a
+ // chance to cleanup.
+ virtual void ReaderModeCheckerDestroyed() {}
+
+ private:
+ ReaderModeChecker* readerModeChecker_;
+ DISALLOW_COPY_AND_ASSIGN(ReaderModeCheckerObserver);
+};
+
+// Checks if a page loaded in a container that allows javascript execution is
+// suitable for reader mode.
+class ReaderModeChecker : web::WebStateObserver {
+ public:
+ explicit ReaderModeChecker(web::WebState* web_state);
+ ~ReaderModeChecker() override;
+
+ // Returns the switch status of the current page.
+ bool CanSwitchToReaderMode();
+
+ // web::WebStateObserver.
+ void NavigationItemCommitted(
+ const web::LoadCommittedDetails& load_details) override;
+ void PageLoaded(
+ web::PageLoadCompletionStatus load_completion_status) override;
+ void WebStateDestroyed() override;
+
+ // Adds and removes observers for page navigation notifications. The order in
+ // which notifications are sent to observers is undefined. Clients must be
+ // sure to remove the observer before they go away.
+ void AddObserver(ReaderModeCheckerObserver* observer);
+ void RemoveObserver(ReaderModeCheckerObserver* observer);
+
+ private:
+ // Checks if the current webstate is distillable.
+ void CheckIsDistillable();
+ // Does a simple check, Just checking OpenGraph properties.
+ void CheckIsDistillableOG(CRWJSInjectionReceiver* receiver);
+ // Does a more involved check.
+ void CheckIsDistillableDetector(CRWJSInjectionReceiver* receiver);
+ // Stores if the current webstate URL is suitable for reader mode.
+ enum class Status;
+ Status is_distillable_;
+ // A list of observers notified when page state changes. Weak references.
+ base::ObserverList<ReaderModeCheckerObserver, true> observers_;
+ base::WeakPtrFactory<ReaderModeChecker> weak_factory_;
+ DISALLOW_COPY_AND_ASSIGN(ReaderModeChecker);
+};
+
+#endif // IOS_CHROME_BROWSER_UI_READER_MODE_READER_MODE_CHECKER_H_

Powered by Google App Engine
This is Rietveld 408576698