// Copyright (c) 2011 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. package org.chromium.sdk.internal.wip; import org.chromium.sdk.internal.wip.protocol.input.page.FrameNavigatedEventData; import org.chromium.sdk.internal.wip.protocol.input.page.FrameValue; import org.chromium.sdk.internal.wip.protocol.input.page.GetResourceTreeData; import org.chromium.sdk.internal.wip.protocol.output.page.GetResourceTreeParams; import org.chromium.sdk.util.GenericCallback; /** * Collects information about frame tree. At first class only watches for the url of root frame. */ class WipFrameManager { private final WipTabImpl tabImpl; private boolean urlUnknown = true; WipFrameManager(WipTabImpl tabImpl) { this.tabImpl = tabImpl; } void readFrames() { GetResourceTreeParams requestParams = new GetResourceTreeParams(); GenericCallback<GetResourceTreeData> callback = new GenericCallback<GetResourceTreeData>() { @Override public void success(GetResourceTreeData value) { FrameValue frame = value.frameTree().frame(); if (frame.parentId() != null) { throw new RuntimeException("Unexpected parentId value"); } String url = frame.url(); boolean silentUpdate = urlUnknown; tabImpl.updateUrl(url, silentUpdate); urlUnknown = false; } @Override public void failure(Exception exception) { throw new RuntimeException("Failed to read frame data", exception); } }; tabImpl.getCommandProcessor().send(requestParams, callback, null); } void frameNavigated(FrameNavigatedEventData eventData) { FrameValue frame = eventData.frame(); String parentId = frame.parentId(); if (parentId == null) { String newUrl = frame.url(); tabImpl.updateUrl(newUrl, false); urlUnknown = false; } } }