| Index: ios/chrome/browser/ui/contextual_search/js_contextual_search_manager.mm
|
| diff --git a/ios/chrome/browser/ui/contextual_search/js_contextual_search_manager.mm b/ios/chrome/browser/ui/contextual_search/js_contextual_search_manager.mm
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..872571dc008c66b35160941f527184ccd7e5f4be
|
| --- /dev/null
|
| +++ b/ios/chrome/browser/ui/contextual_search/js_contextual_search_manager.mm
|
| @@ -0,0 +1,115 @@
|
| +// Copyright 2014 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.
|
| +
|
| +#import "ios/chrome/browser/ui/contextual_search/js_contextual_search_manager.h"
|
| +
|
| +#include "base/ios/ios_util.h"
|
| +#include "base/mac/foundation_util.h"
|
| +#include "base/mac/scoped_block.h"
|
| +#include "base/mac/scoped_nsobject.h"
|
| +#include "base/strings/string_util.h"
|
| +#include "base/strings/sys_string_conversions.h"
|
| +
|
| +static NSString* const kEnableSelectionChangeListener =
|
| + @"__gCrWeb.contextualSearch.enableSelectionChangeListener(%@);";
|
| +
|
| +static NSString* const kSetMutationObserverDelay =
|
| + @"__gCrWeb.contextualSearch.setMutationObserverDelay(%f);";
|
| +
|
| +static NSString* const kDisableMutationObserver =
|
| + @"__gCrWeb.contextualSearch.disableMutationObserver();";
|
| +
|
| +static NSString* const kSetBodyTouchListenerDelay =
|
| + @"__gCrWeb.contextualSearch.setBodyTouchListenerDelay(%f);";
|
| +
|
| +static NSString* const kDisableBodyTouchListener =
|
| + @"__gCrWeb.contextualSearch.disableBodyTouchListener();";
|
| +
|
| +static NSString* const kHandleCtxSearch =
|
| + @"__gCrWeb.contextualSearch.handleTapAtPoint(%f, %f);";
|
| +
|
| +static NSString* const kExpandHighlight =
|
| + @"__gCrWeb.contextualSearch.expandHighlight(%d, %d);";
|
| +
|
| +static NSString* const kHighlightRects =
|
| + @"__gCrWeb.contextualSearch.highlightRects();";
|
| +
|
| +static NSString* const kClearHighlight =
|
| + @"__gCrWeb.contextualSearch.clearHighlight();";
|
| +
|
| +@implementation JsContextualSearchManager
|
| +
|
| +#pragma mark - Protected methods
|
| +
|
| +- (NSString*)scriptPath {
|
| + return @"contextualsearch";
|
| +}
|
| +
|
| +#pragma mark - Public methods
|
| +
|
| +- (void)fetchContextFromSelectionAtPoint:(CGPoint)point
|
| + completionHandler:(void (^)(NSString*))handler {
|
| + NSString* handleContextualSearch =
|
| + [NSString stringWithFormat:kHandleCtxSearch, point.x, point.y];
|
| +
|
| + web::JavaScriptResultBlock resultHandler = ^(id result, NSError* error) {
|
| + if (error) {
|
| + DLOG(ERROR) << "Error evaluating contextual search javascript: "
|
| + << base::SysNSStringToUTF8([error description]);
|
| + }
|
| + handler(base::mac::ObjCCastStrict<NSString>(result));
|
| + };
|
| +
|
| + [self executeJavaScript:handleContextualSearch
|
| + completionHandler:resultHandler];
|
| +}
|
| +
|
| +- (void)enableEventListenersWithMutationDelay:(CGFloat)mutationDelay
|
| + bodyTouchDelay:(CGFloat)bodyTouchDelay {
|
| + NSString* jsForwardString =
|
| + [NSString stringWithFormat:kEnableSelectionChangeListener, @"true"];
|
| + jsForwardString = [jsForwardString
|
| + stringByAppendingFormat:kSetMutationObserverDelay, mutationDelay];
|
| + if (bodyTouchDelay == 0) {
|
| + jsForwardString =
|
| + [jsForwardString stringByAppendingString:kDisableBodyTouchListener];
|
| + } else {
|
| + jsForwardString = [jsForwardString
|
| + stringByAppendingFormat:kSetBodyTouchListenerDelay, bodyTouchDelay];
|
| + }
|
| + [self executeJavaScript:jsForwardString completionHandler:nil];
|
| +}
|
| +
|
| +- (void)highlightRectsWithCompletionHandler:
|
| + (web::JavaScriptResultBlock)completion {
|
| + [self executeJavaScript:kHighlightRects completionHandler:completion];
|
| +}
|
| +
|
| +- (void)clearHighlight {
|
| + [self executeJavaScript:kClearHighlight completionHandler:nil];
|
| +}
|
| +
|
| +- (void)disableListeners {
|
| + NSString* jsForwardString =
|
| + [NSString stringWithFormat:kEnableSelectionChangeListener, @"false"];
|
| +
|
| + jsForwardString =
|
| + [jsForwardString stringByAppendingString:kDisableMutationObserver];
|
| + jsForwardString =
|
| + [jsForwardString stringByAppendingString:kDisableBodyTouchListener];
|
| + [self executeJavaScript:jsForwardString completionHandler:nil];
|
| +}
|
| +
|
| +- (void)expandHighlightToStartOffset:(int)startOffset
|
| + endOffset:(int)endOffset
|
| + completionHandler:(web::JavaScriptResultBlock)completion {
|
| + if (startOffset < 0 || endOffset < 0)
|
| + return;
|
| + NSString* expandHightlightString =
|
| + [NSString stringWithFormat:kExpandHighlight, startOffset, endOffset];
|
| +
|
| + [self executeJavaScript:expandHightlightString completionHandler:completion];
|
| +}
|
| +
|
| +@end
|
|
|