1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CONTENT_RENDERER_ANDROID_CONTENT_DETECTOR_H_ 6 #define CONTENT_RENDERER_ANDROID_CONTENT_DETECTOR_H_ 7 8 #include "third_party/WebKit/public/web/WebRange.h" 9 #include "url/gurl.h" 10 11 namespace blink { 12 class WebHitTestResult; 13 } 14 15 namespace content { 16 17 // Base class for text-based content detectors. 18 class ContentDetector { 19 public: 20 // Holds the content detection results. 21 struct Result { 22 Result(); 23 Result(const blink::WebRange& content_boundaries, 24 const std::string& text, 25 const GURL& intent_url); 26 ~Result(); 27 28 bool valid; 29 blink::WebRange content_boundaries; 30 std::string text; // Processed text of the content. 31 GURL intent_url; // URL of the intent that should process this content. 32 }; 33 ~ContentDetector()34 virtual ~ContentDetector() {} 35 36 // Returns a WebKit range delimiting the contents found around the tapped 37 // position. If no content is found a null range will be returned. 38 Result FindTappedContent(const blink::WebHitTestResult& hit_test); 39 40 protected: ContentDetector()41 ContentDetector() {} 42 43 // Parses the input string defined by the begin/end iterators returning true 44 // if the desired content is found. The start and end positions relative to 45 // the input iterators are returned in start_pos and end_pos. 46 // The end position is assumed to be non-inclusive. 47 virtual bool FindContent(const base::string16::const_iterator& begin, 48 const base::string16::const_iterator& end, 49 size_t* start_pos, 50 size_t* end_pos, 51 std::string* content_text) = 0; 52 53 // Returns the intent URL that should process the content, if any. 54 virtual GURL GetIntentURL(const std::string& content_text) = 0; 55 56 // Returns the maximum length of text to be extracted around the tapped 57 // position in order to search for content. 58 virtual size_t GetMaximumContentLength() = 0; 59 60 blink::WebRange FindContentRange(const blink::WebHitTestResult& hit_test, 61 std::string* content_text); 62 63 DISALLOW_COPY_AND_ASSIGN(ContentDetector); 64 }; 65 66 } // namespace content 67 68 #endif // CONTENT_RENDERER_ANDROID_CONTENT_DETECTOR_H_ 69