MonitorWebViewClient.smali

.class Lcom/taboola/android/js/MonitorWebViewClient;
.super Landroid/webkit/WebViewClient;
.source "MonitorWebViewClient.java"


# static fields
.field private static final GET_RECOMMENDATION_REQUEST_PATTERN:Ljava/lang/String; = "http://trc.taboola.com/.*/trc/3/json"

.field private static final GET_RECOMMENDATION_REQUEST_PATTERN_HTTPS:Ljava/lang/String; = "https://trc.taboola.com/.*/trc/3/json"

.field private static final MOBILE_LOADER_JS:Ljava/lang/String; = "mobile-loader.js"

.field private static final ONLINE_TEMPLATE_JS:Ljava/lang/String; = "https://cdn.taboola.com/shared/templateJS.html"

.field private static final TRC_PREFIX_HTTP:Ljava/lang/String; = "http://trc.taboola.com"

.field private static final TRC_PREFIX_HTTPS:Ljava/lang/String; = "https://trc.taboola.com"


# direct methods
.method constructor <init>()V
    .registers 1

    .line 45
    invoke-direct {p0}, Landroid/webkit/WebViewClient;-><init>()V

    return-void
.end method

.method private static appendQueryToUri(Ljava/lang/String;Ljava/lang/String;)Ljava/net/URI;
    .registers 4
    .annotation system Ldalvik/annotation/Throws;
        value = {
            Ljava/net/URISyntaxException;,
            Ljava/lang/NullPointerException;,
            Ljava/lang/AssertionError;
        }
    .end annotation

    .line 131
    invoke-static {p1}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z

    move-result v0

    if-eqz v0, :cond_c

    .line 132
    new-instance p1, Ljava/net/URI;

    invoke-direct {p1, p0}, Ljava/net/URI;-><init>(Ljava/lang/String;)V

    return-object p1

    .line 135
    :cond_c
    new-instance v0, Ljava/net/URI;

    invoke-direct {v0, p0}, Ljava/net/URI;-><init>(Ljava/lang/String;)V

    invoke-virtual {v0}, Ljava/net/URI;->getQuery()Ljava/lang/String;

    move-result-object v0

    .line 137
    new-instance v1, Ljava/lang/StringBuilder;

    invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V

    invoke-virtual {v1, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-static {v0}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z

    move-result p0

    if-eqz p0, :cond_26

    const-string p0, "?"

    goto :goto_28

    :cond_26
    const-string p0, "&"

    :goto_28
    invoke-virtual {v1, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object p0

    .line 138
    new-instance v0, Ljava/lang/StringBuilder;

    invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V

    invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    const-string p0, "&="

    invoke-static {p1, p0}, Landroid/net/Uri;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;

    move-result-object p0

    invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object p0

    .line 139
    new-instance p1, Ljava/net/URI;

    invoke-direct {p1, p0}, Ljava/net/URI;-><init>(Ljava/lang/String;)V

    return-object p1
.end method

.method private getWebResourceResponse(Ljava/net/URL;)Landroid/util/Pair;
    .registers 6
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Ljava/net/URL;",
            ")",
            "Landroid/util/Pair<",
            "Landroid/webkit/WebResourceResponse;",
            "Ljava/net/URL;",
            ">;"
        }
    .end annotation

    .annotation system Ldalvik/annotation/Throws;
        value = {
            Ljava/io/IOException;
        }
    .end annotation

    .line 144
    invoke-virtual {p1}, Ljava/net/URL;->openConnection()Ljava/net/URLConnection;

    move-result-object v0

    check-cast v0, Ljava/net/HttpURLConnection;

    .line 145
    invoke-virtual {v0}, Ljava/net/HttpURLConnection;->connect()V

    .line 146
    new-instance v1, Ljava/io/BufferedInputStream;

    invoke-virtual {v0}, Ljava/net/HttpURLConnection;->getInputStream()Ljava/io/InputStream;

    move-result-object v0

    invoke-direct {v1, v0}, Ljava/io/BufferedInputStream;-><init>(Ljava/io/InputStream;)V

    .line 147
    new-instance v0, Landroid/webkit/WebResourceResponse;

    const-string v2, "text/html"

    const-string v3, "UTF-8"

    invoke-direct {v0, v2, v3, v1}, Landroid/webkit/WebResourceResponse;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/io/InputStream;)V

    .line 148
    new-instance v1, Landroid/util/Pair;

    invoke-direct {v1, v0, p1}, Landroid/util/Pair;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V

    return-object v1
.end method

.method private handleUrlParams(Ljava/lang/String;Lcom/taboola/android/monitor/TBUrlParamsChange;)Landroid/util/Pair;
    .registers 4
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Ljava/lang/String;",
            "Lcom/taboola/android/monitor/TBUrlParamsChange;",
            ")",
            "Landroid/util/Pair<",
            "Landroid/webkit/WebResourceResponse;",
            "Ljava/net/URL;",
            ">;"
        }
    .end annotation

    .annotation system Ldalvik/annotation/Throws;
        value = {
            Ljava/net/URISyntaxException;,
            Ljava/io/IOException;,
            Ljava/lang/NullPointerException;,
            Ljava/lang/AssertionError;
        }
    .end annotation

    if-eqz p2, :cond_23

    .line 123
    invoke-virtual {p2}, Lcom/taboola/android/monitor/TBUrlParamsChange;->getParams()Ljava/lang/String;

    move-result-object v0

    invoke-static {v0}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z

    move-result v0

    if-eqz v0, :cond_d

    goto :goto_23

    .line 126
    :cond_d
    invoke-virtual {p2}, Lcom/taboola/android/monitor/TBUrlParamsChange;->getParams()Ljava/lang/String;

    move-result-object p2

    invoke-static {p1, p2}, Lcom/taboola/android/js/MonitorWebViewClient;->appendQueryToUri(Ljava/lang/String;Ljava/lang/String;)Ljava/net/URI;

    move-result-object p1

    .line 127
    new-instance p2, Ljava/net/URL;

    invoke-virtual {p1}, Ljava/net/URI;->toString()Ljava/lang/String;

    move-result-object p1

    invoke-direct {p2, p1}, Ljava/net/URL;-><init>(Ljava/lang/String;)V

    invoke-direct {p0, p2}, Lcom/taboola/android/js/MonitorWebViewClient;->getWebResourceResponse(Ljava/net/URL;)Landroid/util/Pair;

    move-result-object p1

    return-object p1

    :cond_23
    :goto_23
    const/4 p1, 0x0

    return-object p1
.end method

.method private static needHandleLoaderUrl(Ljava/lang/String;)Z
    .registers 2

    const-string v0, "mobile-loader.js"

    .line 160
    invoke-virtual {p0, v0}, Ljava/lang/String;->endsWith(Ljava/lang/String;)Z

    move-result p0

    return p0
.end method

.method private static needHandleOnlineTemplateUrl(Ljava/lang/String;)Z
    .registers 2

    const-string v0, "https://cdn.taboola.com/shared/templateJS.html"

    .line 164
    invoke-virtual {p0, v0}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z

    move-result p0

    return p0
.end method

.method private static needToAddUrlParams(Ljava/lang/String;)Z
    .registers 2

    const-string v0, "https://trc.taboola.com/.*/trc/3/json|http://trc.taboola.com/.*/trc/3/json"

    .line 168
    invoke-static {v0}, Ljava/util/regex/Pattern;->compile(Ljava/lang/String;)Ljava/util/regex/Pattern;

    move-result-object v0

    .line 169
    invoke-virtual {v0, p0}, Ljava/util/regex/Pattern;->matcher(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;

    move-result-object p0

    .line 170
    invoke-virtual {p0}, Ljava/util/regex/Matcher;->lookingAt()Z

    move-result p0

    return p0
.end method

.method private static needToSendToMonitor(Ljava/lang/String;)Z
    .registers 2

    const-string v0, "https://trc.taboola.com"

    .line 174
    invoke-virtual {p0, v0}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z

    move-result v0

    if-nez v0, :cond_13

    const-string v0, "http://trc.taboola.com"

    invoke-virtual {p0, v0}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z

    move-result p0

    if-eqz p0, :cond_11

    goto :goto_13

    :cond_11
    const/4 p0, 0x0

    goto :goto_14

    :cond_13
    :goto_13
    const/4 p0, 0x1

    :goto_14
    return p0
.end method


# virtual methods
.method public shouldInterceptRequest(Landroid/webkit/WebView;Landroid/webkit/WebResourceRequest;)Landroid/webkit/WebResourceResponse;
    .registers 3

    .line 156
    invoke-interface {p2}, Landroid/webkit/WebResourceRequest;->getUrl()Landroid/net/Uri;

    move-result-object p2

    invoke-virtual {p2}, Landroid/net/Uri;->toString()Ljava/lang/String;

    move-result-object p2

    invoke-virtual {p0, p1, p2}, Lcom/taboola/android/js/MonitorWebViewClient;->shouldInterceptRequest(Landroid/webkit/WebView;Ljava/lang/String;)Landroid/webkit/WebResourceResponse;

    move-result-object p1

    return-object p1
.end method

.method public shouldInterceptRequest(Landroid/webkit/WebView;Ljava/lang/String;)Landroid/webkit/WebResourceResponse;
    .registers 9

    .line 53
    invoke-static {}, Lcom/taboola/android/js/TaboolaJs;->getInstance()Lcom/taboola/android/js/TaboolaJs;

    move-result-object v0

    const/4 v1, 0x1

    invoke-static {v1}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;

    move-result-object v1

    invoke-virtual {v0, v1}, Lcom/taboola/android/js/TaboolaJs;->getFeature(Ljava/lang/Integer;)Lcom/taboola/android/monitor/TBSdkFeature;

    move-result-object v0

    check-cast v0, Lcom/taboola/android/monitor/TBMobileLoaderChange;

    .line 54
    invoke-static {}, Lcom/taboola/android/js/TaboolaJs;->getInstance()Lcom/taboola/android/js/TaboolaJs;

    move-result-object v1

    const/4 v2, 0x6

    invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;

    move-result-object v2

    invoke-virtual {v1, v2}, Lcom/taboola/android/js/TaboolaJs;->getFeature(Ljava/lang/Integer;)Lcom/taboola/android/monitor/TBSdkFeature;

    move-result-object v1

    check-cast v1, Lcom/taboola/android/monitor/TBOnlineTemplateChange;

    .line 56
    invoke-static {}, Lcom/taboola/android/js/TaboolaJs;->getInstance()Lcom/taboola/android/js/TaboolaJs;

    move-result-object v2

    const/4 v3, 0x3

    invoke-static {v3}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;

    move-result-object v3

    invoke-virtual {v2, v3}, Lcom/taboola/android/js/TaboolaJs;->getFeature(Ljava/lang/Integer;)Lcom/taboola/android/monitor/TBSdkFeature;

    move-result-object v2

    check-cast v2, Lcom/taboola/android/monitor/TBUrlParamsChange;

    const/4 v3, 0x0

    if-eqz v0, :cond_6c

    .line 58
    invoke-static {p2}, Lcom/taboola/android/js/MonitorWebViewClient;->needHandleLoaderUrl(Ljava/lang/String;)Z

    move-result v4

    if-eqz v4, :cond_6c

    .line 61
    :try_start_36
    invoke-virtual {v0}, Lcom/taboola/android/monitor/TBMobileLoaderChange;->getMobileLoaderUrl()Ljava/lang/String;

    move-result-object v4

    invoke-static {v4}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z

    move-result v4

    if-eqz v4, :cond_42

    move-object v0, v3

    goto :goto_4f

    .line 64
    :cond_42
    new-instance v4, Ljava/net/URL;

    invoke-virtual {v0}, Lcom/taboola/android/monitor/TBMobileLoaderChange;->getMobileLoaderUrl()Ljava/lang/String;

    move-result-object v0

    invoke-direct {v4, v0}, Ljava/net/URL;-><init>(Ljava/lang/String;)V

    invoke-direct {p0, v4}, Lcom/taboola/android/js/MonitorWebViewClient;->getWebResourceResponse(Ljava/net/URL;)Landroid/util/Pair;

    move-result-object v0

    :goto_4f
    if-eqz v0, :cond_6c

    .line 68
    iget-object v4, v0, Landroid/util/Pair;->first:Ljava/lang/Object;

    check-cast v4, Landroid/webkit/WebResourceResponse;
    :try_end_55
    .catch Ljava/lang/Exception; {:try_start_36 .. :try_end_55} :catch_60

    .line 69
    :try_start_55
    iget-object v0, v0, Landroid/util/Pair;->second:Ljava/lang/Object;

    check-cast v0, Ljava/net/URL;

    invoke-virtual {v0}, Ljava/net/URL;->toString()Ljava/lang/String;

    move-result-object p2
    :try_end_5d
    .catch Ljava/lang/Exception; {:try_start_55 .. :try_end_5d} :catch_5e

    goto :goto_6d

    :catch_5e
    move-exception v0

    goto :goto_62

    :catch_60
    move-exception v0

    move-object v4, v3

    .line 72
    :goto_62
    sget-object v5, Lcom/taboola/android/js/TaboolaJs;->TAG:Ljava/lang/String;

    invoke-virtual {v0}, Ljava/lang/Exception;->getMessage()Ljava/lang/String;

    move-result-object v0

    invoke-static {v5, v0}, Lcom/taboola/android/utils/Logger;->e(Ljava/lang/String;Ljava/lang/String;)V

    goto :goto_6d

    :cond_6c
    move-object v4, v3

    :goto_6d
    if-eqz v1, :cond_aa

    .line 76
    invoke-static {p2}, Lcom/taboola/android/js/MonitorWebViewClient;->needHandleOnlineTemplateUrl(Ljava/lang/String;)Z

    move-result v0

    if-eqz v0, :cond_aa

    .line 79
    :try_start_75
    invoke-virtual {v1}, Lcom/taboola/android/monitor/TBOnlineTemplateChange;->getOnlineTemplateUrl()Ljava/lang/String;

    move-result-object v0

    invoke-static {v0}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z

    move-result v0

    if-eqz v0, :cond_80

    goto :goto_8d

    .line 82
    :cond_80
    new-instance v0, Ljava/net/URL;

    invoke-virtual {v1}, Lcom/taboola/android/monitor/TBOnlineTemplateChange;->getOnlineTemplateUrl()Ljava/lang/String;

    move-result-object v1

    invoke-direct {v0, v1}, Ljava/net/URL;-><init>(Ljava/lang/String;)V

    invoke-direct {p0, v0}, Lcom/taboola/android/js/MonitorWebViewClient;->getWebResourceResponse(Ljava/net/URL;)Landroid/util/Pair;

    move-result-object v3

    :goto_8d
    if-eqz v3, :cond_aa

    .line 86
    iget-object v0, v3, Landroid/util/Pair;->first:Ljava/lang/Object;

    check-cast v0, Landroid/webkit/WebResourceResponse;
    :try_end_93
    .catch Ljava/lang/Exception; {:try_start_75 .. :try_end_93} :catch_a0

    .line 87
    :try_start_93
    iget-object v1, v3, Landroid/util/Pair;->second:Ljava/lang/Object;

    check-cast v1, Ljava/net/URL;

    invoke-virtual {v1}, Ljava/net/URL;->toString()Ljava/lang/String;

    move-result-object p2
    :try_end_9b
    .catch Ljava/lang/Exception; {:try_start_93 .. :try_end_9b} :catch_9d

    move-object v4, v0

    goto :goto_aa

    :catch_9d
    move-exception v1

    move-object v4, v0

    goto :goto_a1

    :catch_a0
    move-exception v1

    .line 90
    :goto_a1
    sget-object v0, Lcom/taboola/android/js/TaboolaJs;->TAG:Ljava/lang/String;

    invoke-virtual {v1}, Ljava/lang/Exception;->getMessage()Ljava/lang/String;

    move-result-object v1

    invoke-static {v0, v1}, Lcom/taboola/android/utils/Logger;->e(Ljava/lang/String;Ljava/lang/String;)V

    :cond_aa
    :goto_aa
    if-nez v4, :cond_d5

    if-eqz v2, :cond_d5

    .line 94
    invoke-static {p2}, Lcom/taboola/android/js/MonitorWebViewClient;->needToAddUrlParams(Ljava/lang/String;)Z

    move-result v0

    if-eqz v0, :cond_d5

    .line 96
    :try_start_b4
    invoke-direct {p0, p2, v2}, Lcom/taboola/android/js/MonitorWebViewClient;->handleUrlParams(Ljava/lang/String;Lcom/taboola/android/monitor/TBUrlParamsChange;)Landroid/util/Pair;

    move-result-object v0

    if-eqz v0, :cond_d5

    .line 98
    iget-object v1, v0, Landroid/util/Pair;->first:Ljava/lang/Object;

    check-cast v1, Landroid/webkit/WebResourceResponse;
    :try_end_be
    .catch Ljava/lang/Exception; {:try_start_b4 .. :try_end_be} :catch_cb

    .line 99
    :try_start_be
    iget-object v0, v0, Landroid/util/Pair;->second:Ljava/lang/Object;

    check-cast v0, Ljava/net/URL;

    invoke-virtual {v0}, Ljava/net/URL;->toString()Ljava/lang/String;

    move-result-object p2
    :try_end_c6
    .catch Ljava/lang/Exception; {:try_start_be .. :try_end_c6} :catch_c8

    move-object v4, v1

    goto :goto_d5

    :catch_c8
    move-exception v0

    move-object v4, v1

    goto :goto_cc

    :catch_cb
    move-exception v0

    .line 102
    :goto_cc
    sget-object v1, Lcom/taboola/android/js/TaboolaJs;->TAG:Ljava/lang/String;

    invoke-virtual {v0}, Ljava/lang/Exception;->getMessage()Ljava/lang/String;

    move-result-object v0

    invoke-static {v1, v0}, Lcom/taboola/android/utils/Logger;->e(Ljava/lang/String;Ljava/lang/String;)V

    .line 106
    :cond_d5
    :goto_d5
    invoke-static {p2}, Lcom/taboola/android/js/MonitorWebViewClient;->needToSendToMonitor(Ljava/lang/String;)Z

    move-result v0

    if-eqz v0, :cond_fc

    :try_start_db
    const-string v0, "UTF-8"

    .line 108
    invoke-static {p2, v0}, Ljava/net/URLDecoder;->decode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;

    move-result-object v0

    .line 109
    invoke-static {}, Lcom/taboola/android/js/TaboolaJs;->getInstance()Lcom/taboola/android/js/TaboolaJs;

    move-result-object v1

    new-instance v2, Ljava/util/Date;

    invoke-direct {v2}, Ljava/util/Date;-><init>()V

    invoke-virtual {v2}, Ljava/util/Date;->getTime()J

    move-result-wide v2

    invoke-virtual {v1, v2, v3, v0}, Lcom/taboola/android/js/TaboolaJs;->sendUrlToMonitor(JLjava/lang/String;)V
    :try_end_f1
    .catch Ljava/lang/Exception; {:try_start_db .. :try_end_f1} :catch_f2

    goto :goto_fc

    :catch_f2
    move-exception v0

    .line 111
    sget-object v1, Lcom/taboola/android/js/TaboolaJs;->TAG:Ljava/lang/String;

    invoke-virtual {v0}, Ljava/lang/Exception;->getMessage()Ljava/lang/String;

    move-result-object v0

    invoke-static {v1, v0}, Lcom/taboola/android/utils/Logger;->e(Ljava/lang/String;Ljava/lang/String;)V

    :cond_fc
    :goto_fc
    if-eqz v4, :cond_ff

    return-object v4

    .line 119
    :cond_ff
    invoke-super {p0, p1, p2}, Landroid/webkit/WebViewClient;->shouldInterceptRequest(Landroid/webkit/WebView;Ljava/lang/String;)Landroid/webkit/WebResourceResponse;

    move-result-object p1

    return-object p1
.end method