15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/android/meta_tag_observer.h"
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/common/chrome_constants.h"
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/common/render_messages.h"
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/browser/render_frame_host.h"
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/public/browser/web_contents.h"
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/public/browser/web_contents_observer.h"
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)MetaTagObserver::MetaTagObserver(const std::string& meta_tag)
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    : meta_tag_(meta_tag) {
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (meta_tag_.size() > chrome::kMaxMetaTagAttributeLength) {
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    VLOG(1) << "Length of the <meta> name attribute is too large.";
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    NOTREACHED();
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)MetaTagObserver::~MetaTagObserver() {
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid MetaTagObserver::DidFinishLoad(content::RenderFrameHost* render_frame_host,
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                    const GURL& validated_url) {
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (render_frame_host->GetParent())
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    return;
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  validated_url_ = validated_url;
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Send(new ChromeViewMsg_RetrieveMetaTagContent(routing_id(),
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                                validated_url,
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                                meta_tag_));
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool MetaTagObserver::OnMessageReceived(const IPC::Message& message) {
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  bool handled = true;
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  IPC_BEGIN_MESSAGE_MAP(MetaTagObserver, message)
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    IPC_MESSAGE_HANDLER(ChromeViewHostMsg_DidRetrieveMetaTagContent,
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        OnDidRetrieveMetaTagContent)
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    IPC_MESSAGE_UNHANDLED(handled = false)
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  IPC_END_MESSAGE_MAP()
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return handled;
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void MetaTagObserver::OnDidRetrieveMetaTagContent(
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    bool success,
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const std::string& tag_name,
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const std::string& tag_content,
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const GURL& expected_url) {
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (!success || tag_name != meta_tag_ || validated_url_ != expected_url ||
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      tag_content.size() >= chrome::kMaxMetaTagAttributeLength) {
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return;
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  HandleMetaTagContent(tag_content, expected_url);
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
55